これは、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のインスタンスのフィールドにアクセスしようとしています。TestTest
実際、メソッドget(TestContainer<T> container)を次のように変更すると、コンパイルされます(警告なしで)。
public int get(TestContainer<T> container){
Test t = container.get();
return t._myVar;
}
- なぜこれがコンパイルされなくなったのですか?
- これはJava6のバグでしたか?もしそうなら、なぜですか?
- これはJava7のバグですか?
私はグーグルを持っていて、Oracleバグデータベースで検索しましたが、これについては何も見つかりませんでした...