Компилятор Maven против компилятора Eclipse
Я обнаружил много проблем в своем проекте, когда перешел из Eclipse build в maven build. Я использую плагин компилятора 2.5.1.
JDK является открытым JDK-7
Я выделил проблему в новом проекте и остановил ее на следующем:
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;
}
}
Это не в состоянии скомпилировать с javaC (но работает в Eclipse), заявив следующую ошибку:
[ОШИБКА] Не удалось выполнить цель org.apache.maven.plugins: maven-compiler-plugin: 2.5.1: compile (default-compile) при тестировании проекта: ошибка компиляции
[ОШИБКА] /home/username/workspaces/projectx43/test/src/main/java/test/Test.java:[11,24] ошибка: несовместимые типы
И это будет работать:
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;
}
}
Каждый может видеть, что версия с E так же хороша, как и версия, использующая только T. Теперь возникает вопрос, могу ли я настроить компилятор javac, чтобы принять это. Любая информация об этом будет оценена.
Также еще одна возможность: openJDK 7 обрабатывает это по-другому, чем SunJDK 7? Если вы можете проверить этот фрагмент с последними версиями Windows Sun JDK 7 или даже с бета-версией JDK 8. Большое спасибо.
PS: я прочитал эти вопросы об Eclipse vs. JavaC + Generics, и связанные с ними ошибки указывают на необходимость их устранения.