Voici le code simpleJava 8 Types incompatibles
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;
}
}
Lorsque des points JAVA_HOME à JDK 8 et j'utilise javac -source 1.7 SimpleTest.java
je reçois
SimpleTest.java:9: error: incompatible types: ArrayList<Map> cannot be converted to ArrayList<Map<String,Object>>
final ArrayList<Map<String, Object>> maps = newArrayList(
^
Lorsque j'utilise -source 1.8
ou pas tout option -source
fonctionne ok. Maintenant, lorsque JAVA_HOME pointe vers JDK 7, le code compile toujours si j'utilise -source 1.7
ou non.
Dans un premier temps cette question était d'un morceau de logiciel où fichier POM a une <source>
et <target>
ensemble à 1.7
et la construction échouait sur JDK 8 mais était ok sur JDK 7.
Maintenant pour la question - ce qui cause ça arrive? Cela me semble être un important désagrément. Pourquoi compiler sur JDK 8 avec source
mis à 1.7
échoue?
Alors, dites-vous que ce code compile avec JDK 7 mais pas avec JDK 8? – Tunaki
Oui, exactement cela. Plus encore, les paramètres du compilateur dans Maven mis à la source étant de 1,7 dans les deux cas – EvgeniySharapov
Veuillez définir explicitement ce que nous comparons ici. Compilez-vous avec un compilateur JDK 8 ou 7? Ou compilez-vous avec un compilateur JDK 8 avec la source 1.8 pour Maven et le compilateur JDK 7 avec la source 1.7? De plus, le code que vous avez posté n'a pas de 'java.util.ArrayList' (avec des types bruts) donc je ne suis pas sûr de la façon dont vous avez eu cette erreur. –
Tunaki