Maven Compiler vs Eclipse Compiler Generics Diferença?
Vi muitos problemas no meu projeto quando fui da compilação do Eclipse para a compilação do maven. Eu uso o plugin do compilador 2.5.1.
JDK é aberto-JDK-7
Eu isolei o problema em um novo projeto e o problema é o seguinte:
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;
}
}
Isso não é compilado com javaC (mas funciona no Eclipse), indicando o seguinte erro:
[ERRO] Falha ao executar meta org.apache.maven.plugins: maven-compiler-plugin: 2.5.1: compilação (default-compile) no teste do projeto: Falha de compilação
[ERROR] /home/username/workspaces/projectx43/test/src/main/java/test/Test.java:[11,24] erro: tipos incompatíveis
E isso vai 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 podem ver que a versão com E é tão boa quanto a que usa apenas T. A questão agora é: posso ajustar o compilador javac para aceitar isso. Qualquer informação sobre isso seria apreciada.
Outra possibilidade: o openJDK 7 está lidando com isso de maneira diferente com o SunJDK 7? Se você puder, por favor, verifique este trecho com as versões mais recentes do Windows Sun JDK 7 ou até mesmo com o beta do JDK 8. Muito obrigado.
PS: Eu li essas perguntas sobre Eclipse vs. JavaC + Generics e os Bugs linkados estão sendo resolvidos.