这是简单的代码
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class SimpleTest {
public static void main(String[] args) {
final ArrayList<Map<String, Object>> maps = newArrayList(
createMap("1", "a", Collections.EMPTY_MAP, Collections.EMPTY_MAP),
createMap("2", "b", Collections.EMPTY_MAP, Collections.EMPTY_MAP),
createMap("3", "c", Collections.EMPTY_MAP, Collections.EMPTY_MAP)
);
System.out.println(" maps = " + maps);
}
public static Map<String, Object> createMap(String value1, String value2, Map<String, Object> object1, Map<String, Object> object2) {
Map<String, Object> map = new HashMap<>();
map.put("value1", value1);
map.put("value1", value1);
map.put("object1", object1);
map.put("object2", object2);
return map;
}
public static <E> ArrayList<E> newArrayList(E... elements) {
ArrayList<E> list = new ArrayList<E>(elements.length);
Collections.addAll(list, elements);
return list;
}
}
当 JAVA_HOME 指向 JDK 8 并且我使用javac -source 1.7 SimpleTest.java
I get
SimpleTest.java:9: error: incompatible types: ArrayList<Map> cannot be converted to ArrayList<Map<String,Object>>
final ArrayList<Map<String, Object>> maps = newArrayList(
^
当我使用-source 1.8
or no -source
选项一切正常。现在,当 JAVA_HOME 指向 JDK 7 时,无论我使用什么,代码总是会编译-source 1.7
或不。
最初这个问题是关于一个软件,其中 POM 文件有一个<source>
and <target>
set to 1.7
在 JDK 8 上构建失败,但在 JDK 7 上构建正常。
现在的问题是——是什么原因导致它发生?在我看来,这似乎是某种重大的忽视。为什么在 JDK 8 上编译source
set to 1.7
失败?