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

时间:2017-10-01 18:59:05

标签: java

我遇到了一些我编写的代码问题。它在我的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>> 

以上代码100%在我的Mac上编译,但根本不会在另一台机器上编译。

任何人都知道为什么会发生这种情况? (旁白:除了编译和运行Java程序之外,我对其他人的设置一无所知)

1 个答案:

答案 0 :(得分:1)

似乎关于类型推断情况.jdk8允许以下代码:

conversationRecord.put(uuid, new ArrayList<>());

但是在早期版本中,即使是jdk7,上面的代码也不允许。所以你应该检查另一台机器是jdk8还是后者。

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

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

有关type inference

的详细信息