【发布时间】:2019-04-03 19:33:54
【问题描述】:
我有一些 Java 代码可以在我的 Mac 上编译,但无法在我的 Ubuntu 机器上编译。具体来说,当使用List的静态of方法时,报错:
error: cannot find symbol
List<String> list2 = List.of("cat", "dog");
^
symbol: method of(String,String)
location: interface List
1 error
我认为这可能是 Java 版本的问题。果然,它只使用了 Java 8。但是,我随后使用 OpenJDK 升级了我的 Ubuntu 机器以使用 Java 11,但我仍然遇到同样的问题。
我在 Ubuntu 机器上运行 java -version 得到的输出是:
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment (build 11.0.1+13-Ubuntu-3ubuntu116.04ppa1)
OpenJDK 64-Bit Server VM (build 11.0.1+13-Ubuntu-3ubuntu116.04ppa1, mixed mode, sharing)
我在 Mac 机器上运行 java -version 得到的输出是:
java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)
对于编译,我使用的是 Gradle 版本 5.2.1。我使用的是 Gradle 包装器,所以两台机器都使用相同版本的 Gradle。
这是编译不正确的文件。
package mypackage;
import java.util.List;
import java.util.ArrayList;
public class App {
public static void main(String[] args) {
// No errors on both MacOS and Ubuntu
List<String> list1 = new ArrayList<>();
list1.add("cat");
System.out.println(list1);
// Fails to compile on Ubuntu
List<String> list2 = List.of("cat", "dog");
System.out.println(list2);
}
}
【问题讨论】: