Я нашел похожие темы, но слишком сложные и не совсем то же самое. Так и есть. Здесь (минимальный) код, который хорош на 1.6, но не компилируется с 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();
}
}
В 1.7 ошибка:
java: name clash: doSomething(Test.A<Test.C>) and doSomething(Test.A<Test.B>) have the same erasure
Я понимаю стирание типа и почему это неправильный код. Я просто не понимаю, почему мы можем иметь этот код в нашем проекте, который компилируется и работает в версии 1.6, когда у 1.7 есть проблемы с ним. Что не так? Это ошибка в компиляторе 1.6, которая позволяет нам это сделать? Можно ли заставить его работать в 1,7, кроме перезаписи?
- JDK1.6 версия javac: 1.6.0_43
- JDK1.7 версия javac: 1.7.0_25