Java不能在Ubuntu上编译,但可以在Windows上编译

我有个问题。在我的 Windows 桌面上,我运行了一个 java 文件,没有任何错误。我用 java sdk 版本运行它:15.0.2。现在我有我想在我的 ubuntu 机器上运行的相同文件,但是当我尝试:时
javac Test.java,它给了我以下错误:

Test.java:16: error: illegal start of expression
        return switch (unit) {
               ^
Test.java:17: error: : expected
            case "m" -> 60L * Integer.parseInt(quantity);
                    ^
Test.java:17: error: illegal start of expression
            case "m" -> 60L * Integer.parseInt(quantity);
                     ^
Test.java:18: error: : expected
            case "h" -> 60L * 60 * Integer.parseInt(quantity);
                    ^
Test.java:18: error: illegal start of expression
            case "h" -> 60L * 60 * Integer.parseInt(quantity);
                     ^
Test.java:19: error: : expected
            case "d" -> 60L * 60 * 24 * Integer.parseInt(quantity);
                    ^
Test.java:19: error: illegal start of expression
            case "d" -> 60L * 60 * 24 * Integer.parseInt(quantity);
                     ^
Test.java:20: error: : expected
            default -> 0;
                   ^
Test.java:20: error: illegal start of expression
            default -> 0;
                    ^
9 errors

这是完整的代码Test.java

package com.company.drivers;

public class Test {

    public static void main(String[] args) {

        System.out.println(getPeriodMultiplierSecs("15m"));
        
    }


    public static long getPeriodMultiplierSecs(String period) {
        String quantity = period.substring(0, period.length() - 1);
        String unit = period.substring(period.length() - 1);

        return switch (unit) {
            case "m" -> 60L * Integer.parseInt(quantity);
            case "h" -> 60L * 60 * Integer.parseInt(quantity);
            case "d" -> 60L * 60 * 24 * Integer.parseInt(quantity);
            default -> 0;
        };
    }
}

java ubuntu 版本是11.0.10. 为什么我会在 ubuntu 上收到这些错误,我该如何解决?

回答

您正在使用 java 12 中引入的 switch-as-expression 语言功能。因此,此代码无法在 java11 或更低版本上编译。

Ubuntu 与 Windows 是一个完全的红鲱鱼;javac在所有平台上都是完全一样的。大约是 11 比 15。

升级到 15。或者,将该 switch 重写为基于语句的变体,该变体自 java 1 以来一直是 java 的一部分(尽管,切换字符串是 java6-ism。不过,它已经有十多年历史了,所以不用担心那里的兼容性):

int v;
switch (unit) {
case "m":
    v = 60L * Integer.parseInt(quantity);
    break;
case "h": .... and so on.
}


以上是Java不能在Ubuntu上编译,但可以在Windows上编译的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>