JDK 1.7 łamie kompatybilność wsteczną? (leki generyczne)
Znalazłem podobne tematy, ale zbyt skomplikowane i nie do końca takie same. Więc chodzi o to. Oto (minimalny) kod, który jest dobry na 1.6, ale nie kompiluje się z 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();
}
}
W 1.7 błąd jest następujący:
java: name clash: doSomething(Test.A<Test.C>) and doSomething(Test.A<Test.B>) have the same erasure
Rozumiem wymazywanie typu i dlaczego jest to zły kod. Po prostu nie rozumiem, dlaczego możemy skompilować i uruchomić ten kod w naszym projekcie w wersji 1.6, gdy 1.7 ma z tym problemy. Co jest nie tak? Czy jest to błąd w kompilatorze 1.6, który pozwala nam to zrobić? Czy to możliwe, aby działał w 1.7 inaczej niż przepisywanie?
JDK1.6 wersja javac: 1.6.0_43JDK1.7 wersja javac: 1.7.0_25