¿Maven Compiler vs Eclipse Compiler Generics Difference?
Noté muchos problemas en mi proyecto cuando pasé de la compilación Eclipse a la compilación maven. Yo uso el plugin 2.5.1 compilador.
JDK está abierto-JDK-7
Aislé el problema en un nuevo proyecto y lo detuve. El problema es el siguiente:
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;
}
}
Esto no se compila con javaC (pero funciona en Eclipse) indicando el siguiente error:
[ERROR] Error al ejecutar el objetivo org.apache.maven.plugins: maven-compiler-plugin: 2.5.1: compilar (compilación predeterminada) en la prueba del proyecto: Error de compilación
[ERROR] /home/username/workspaces/projectx43/test/src/main/java/test/Test.java:[11,24] error: tipos incompatibles
Y esto funcionará:
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;
}
}
Todos pueden ver que la versión con E es tan buena como la que usa solo T. La pregunta ahora es, ¿puedo ajustar el compilador javac para que acepte esto? Cualquier información sobre esto sería apreciada.
También otra posibilidad: ¿openJDK 7 está manejando esto de manera diferente a SunJDK 7? Si puede, verifique este fragmento con las últimas versiones de Sun JDK 7 de Windows o incluso con la versión beta de JDK 8. Muchas gracias.
PD: Leí esas preguntas de Eclipse vs. JavaC + Generics y los Bugs enlazados indican que se han resuelto.