JDK 1.7 bricht die Abwärtskompatibilität ab? (Generika)

Ich habe ähnliche Themen gefunden, aber zu kompliziert und nicht ganz gleich. So ist die Sache. Hier ist der (minimale) Code, der in 1.6 in Ordnung ist, aber nicht mit 1.7-Java kompiliert werden kann.

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();
    }
}

Am 1.7 ist der Fehler folgender:

java: name clash: doSomething(Test.A<Test.C>) and doSomething(Test.A<Test.B>) have the same erasure

Ich verstehe die Art der Löschung und warum es ein falscher Code ist. Ich verstehe nur nicht, warum wir diesen Code in unserem Projekt in 1.6 kompilieren und ausführen können, wenn 1.7 Probleme damit hat. Was ist falsch? Ist es ein Fehler im 1.6-Compiler, der uns dies ermöglicht? Ist es möglich, es in 1.7 zum Laufen zu bringen, außer umzuschreiben?

JDK1.6 Java-Version: 1.6.0_43JDK1.7 Java-Version: 1.7.0_25

Antworten auf die Frage(2)

Ihre Antwort auf die Frage