O JDK 1.7 quebra a compatibilidade com versões anteriores? (genéricos)
Eu encontrei tópicos semelhantes, mas muito complicados e não exatamente o mesmo. Então a coisa é. Aqui está o código (mínimo), que é bom em 1.6, mas não compila com 1.7 javac.
public class Test {
private static class A<T>{};
private static class B{};
private static class C{};
B doSomething(A<B> arg){
return new B();
}
C doSomething(A<C> arg){
return new C();
}
}
No 1.7 o erro é este:
java: name clash: doSomething(Test.A<Test.C>) and doSomething(Test.A<Test.B>) have the same erasure
Eu entendo o tipo de apagamento e porque é um código errado. Eu simplesmente não entendo porque podemos ter este código em nosso projeto compilando e rodando em 1.6, quando o 1.7 tem problemas com ele. O que está errado? É um erro no compilador 1.6 que nos permite fazê-lo? É possível fazer isto funcionar em 1.7 diferente de reescrever?
JDK1.6 versão javac: 1.6.0_43JDK1.7 Versão javac: 1.7.0_25