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.
}