私は似たような話題を見つけましたが、過度に複雑で、あまり同じではありません。それは事です。ここでは1.6で問題ない(最小)コードはありますが、1.7 javacではコンパイルできません。JDK 1.7では下位互換性が損なわれますか? (ジェネリック)
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.7で問題が発生したときに、1.6でコンパイルして実行しているプロジェクトでなぜこのコードを使用できるのか分かりません。なにが問題ですか?それは私たちがそうすることを可能にする1.6コンパイラのバグですか?書き換え以外の1.7で動作させることは可能ですか?
- JDK1.6のjavacのバージョン:1.6.0_43
- JDK1.7のjavacのバージョン:1.7.0_25
感謝を拒否されます。しかし、私はまだ彼らが後方互換性を破ったのが好きではありません。 – NeplatnyUdaj
@NeplatnyUdaj:バグを修正しても下位互換性が失われません。 – newacct
@newacct:多くのコードがそれに依存するかもしれないからだと思います。あなたはJLS全体を読む開発者を知っていますか? – NeplatnyUdaj