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

Ответы на вопрос(2)

Ваш ответ на вопрос