Kompilator Maven a kompilator Eclipse Generics Difference?
Zauważyłem wiele problemów w moim projekcie, kiedy przeszedłem od wersji Eclipse do wersji Maven. Używam wtyczki kompilatora 2.5.1.
JDK jest open-JDK-7
Wyodrębniłem problem w nowym projekcie i zapisałem go w tym problemie:
public class Test {
public static void main(String[] args) {
List<String> list = newList();
for(String name : sort(newList(list))) {
System.out.println(name);
}
}
public static <T> List<T> newList() {
return new ArrayList<T>();
}
public static <T, E extends T> List<T> newList(Collection<E> list) {
return new ArrayList<T>();
}
public static <T> List<T> sort(List<T> list) {
return list;
}
}
To nie udaje się skompilować z javaC (ale działa w Eclipse) z następującym błędem:
[BŁĄD] Nie można wykonać celu org.apache.maven.plugins: maven-compiler-plugin: 2.5.1: kompiluj (kompilacja domyślna) podczas testu projektu: Błąd kompilacji
[ERROR] /home/username/workspaces/projectx43/test/src/main/java/test/Test.java:[11,24] błąd: niezgodne typy
A to zadziała:
public class Test {
public static void main(String[] args) {
List<String> list = newList();
for(String name : sort(newList(list))) {
System.out.println(name);
}
}
public static <T> List<T> newList() {
return new ArrayList<T>();
}
public static <T> List<T> newList(Collection<? extends T> list) {
return new ArrayList<T>();
}
public static <T> List<T> sort(List<T> list) {
return list;
}
}
Wszyscy widzą, że wersja z E jest tak samo dobra, jak wersja używająca tylko T. Teraz pytanie brzmi, czy mogę zmodyfikować kompilator javac, aby to zaakceptować. Wszelkie informacje na ten temat będą mile widziane.
Inna możliwość: czy openJDK 7 obsługuje to inaczej niż SunJDK 7? Jeśli możesz, zweryfikuj ten fragment z najnowszymi wersjami Windows Sun JDK 7 lub nawet z wersją beta JDK 8. Bardzo dziękuję.
PS: Przeczytałem pytania Eclipse vs. JavaC + Generics oraz powiązane błędy zgłaszane do rozwiązania.