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

questionAnswers(2)

yourAnswerToTheQuestion