下面是一些使用 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 中的错误吗?
我有一个谷歌并在 Oracle 错误数据库中搜索,但没有找到任何关于此的...