これは、Java 6を使用してコンパイルするが、Java7ではコンパイルしないコードの簡単な例です。
public class Test<T extends Test> {
private final int _myVar;
public Test(int myVar) {
_myVar = myVar;
}
public int get(TestContainer<T> container){
T t = container.get();
return t._myVar;
}
private static class TestContainer<T extends Test> {
private final T _test;
private TestContainer(T test) {
_test = test;
}
public T get(){
return _test;
}
}
}
get(TestContainer<T> container)
Java 7では、メソッドでのコンパイルに失敗し、次のエラーが発生します。
エラー:_myVarはテストでプライベートアクセスを持っています
なぜこれがコンパイルされなくなったのか理解できません-私の考えではそうすべきです。変数t
はタイプT
であり、拡張する必要がありますTest
。クラス内から_myVar
のインスタンスのフィールドにアクセスしようとしています。Test
Test
実際、メソッドget(TestContainer<T> container)
を次のように変更すると、コンパイルされます(警告なしで)。
public int get(TestContainer<T> container){
Test t = container.get();
return t._myVar;
}
- なぜこれがコンパイルされなくなったのですか?
- これはJava6のバグでしたか?もしそうなら、なぜですか?
- これはJava7のバグですか?
私はグーグルを持っていて、Oracleバグデータベースで検索しましたが、これについては何も見つかりませんでした...