JDK 1.7 нарушает обратную совместимость? (генерики)
Я нашел похожие темы, но слишком сложные и не совсем одинаковые. Так что дело в том. Вот (минимальный) код, который подходит для 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