Вот простой пример некоторого кода, который компилируется с использованием 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?
У меня был Google и искал в базе данных Oracle, но ничего не нашел на этом...