下面是一些代码,编译使用Java 6个简单的例子,但在Java 7不编译。
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;
}
}
}
在Java 7,它失败在编译get(TestContainer<T> container)
的方法,与该错误:
错误:_myVar在测试私有访问
我不明白为什么这不再编译 - 在我的脑海它应该。 可变t
是类型的T
,其中必须扩展Test
。 它试图访问该字段_myVar
的实例的Test
在类的内部Test
。
事实上,如果我改变方法get(TestContainer<T> container)
到下文中,编译(没有警告):
public int get(TestContainer<T> container){
Test t = container.get();
return t._myVar;
}
- 为什么会出现这种不再编译?
- 这是在Java 6中的错误吗? 如果是这样,为什么?
- 这是Java 7中的错误?
我有一个谷歌和甲骨文bug数据库搜索,但没有发现对这个事情...