我遇到了一些我编写的代码问题。它在我的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程序之外,我对其他人的设置一无所知)
答案 0 :(得分:1)
似乎关于类型推断情况.jdk8允许以下代码:
conversationRecord.put(uuid, new ArrayList<>());
但是在早期版本中,即使是jdk7,上面的代码也不允许。所以你应该检查另一台机器是jdk8还是后者。
当然,您可以像这样更改代码:
ArrayList<HashSet<String>> temp=new ArrayList<>();
conversationRecord.put(uuid, temp);
有关type inference 。
的详细信息