在一台机器上编译而不是在另一台机器上编译的Java代码

在一台机器上编译而不是在另一台机器上编译的Java代码,java,Java,我写的一些代码有问题。它在我的Mac上使用Java 8 Update 121 build 1.8.0、Nano文本编辑器以及Java命令行编译器javac和Java进行了很好的编译,但由于某些原因,它不会在另一台机器上编译 在另一台机器上,问题来自以下几行: public class SomeClass { ... public static HashMap<String, ArrayList<HashSet<String>>> conversationRec

我写的一些代码有问题。它在我的Mac上使用Java 8 Update 121 build 1.8.0、Nano文本编辑器以及Java命令行编译器javac和Java进行了很好的编译,但由于某些原因,它不会在另一台机器上编译

在另一台机器上,问题来自以下几行:

public class SomeClass {
...
public static HashMap<String, ArrayList<HashSet<String>>> conversationRecord = new HashMap<>();
...
public static someMethod() {
...
//This produces errors
conversationRecord.put(uuid, new ArrayList<>());
conversationRecord.get(uuid).add(0, new HashSet<>()); 
conversationRecord.get(uuid).add(1, new HashSet<>()); 
}//end method
}//end class
错误内容如下:

java:279: error: no suitable method found for put(String,ArrayList<Object>)
conversationRecord.put(uuid, new ArrayList<>());
^
method HashMap.put(String,ArrayList<HashSet<String>>) is not applicable
(actual argument ArrayList<Object> cannot be converted to ArrayList<HashSet<String>> by method invocation conversion)
method AbstractMap.put(String,ArrayList<HashSet<String>>) is not applicable
(actual argument ArrayList<Object> cannot be converted to ArrayList<HashSet<String>> 
上面的代码在我的Mac上100%编译,但根本不会在另一台机器上编译


有人知道为什么会这样吗?旁白:除了编译和运行Java程序之外,我对其他人的设置一无所知。这似乎与类型推断情况有关。jdk8允许以下代码:

conversationRecord.put(uuid, new ArrayList<>());
但在早期版本中,即使是jdk7,上面的代码也是不允许的。所以您应该检查另一台机器是jdk8还是后者

当然,您可以这样更改代码:

 ArrayList<HashSet<String>> temp=new ArrayList<>();
 conversationRecord.put(uuid, temp);

有关。

的详细信息,请尝试在两台计算机上运行java-version,并查看另一台计算机上安装的java版本是否与主要版本相同?这是完整的错误消息集。这可能是由于之前出现的其他故障造成的。另一台机器的jdk版本似乎早于jdk8。您应该检查另一台机器的jdk版本。jdk可能就是问题所在。我对另一台机器没有把握。但是每个人都同意这种非常简单的语法应该是可编译的吗?