下面是一些使用Java6编译但不能在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;
}
}
}
在Java7中,它无法在get(TestContainer<T> container)
方法中编译,错误如下:
错误:_myVar在测试中具有私有访问权限
我不明白为什么它不再编译了--在我看来它应该编译。变量t
的类型为T
,它必须扩展Test
。它试图从类Test
中访问Test
实例的字段_myVar
。
实际上,如果我将方法get(TestContainer<T> container)
更改为以下内容,它将进行编译(没有任何警告):
public int get(TestContainer<T> container){
Test t = container.get();
return t._myVar;
}
我已经用谷歌搜索了甲骨文的bug数据库,但没有找到任何关于这个的东西……
https://stackoverflow.com/questions/10782876
复制相似问题