Вот простой пример кода, который компилируется с использованием 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
с ошибкой:
ошибка: _myVar имеет частный доступ в тесте
Я не понимаю, почему это больше не компилируется — по-моему, должно. Переменная t
имеет тип T
, который должен расширять Test
. Он пытается получить доступ к полю _myVar
экземпляра Test
из класса Test
.
Действительно, если я изменю метод get(TestContainer
на следующий, он компилируется (без предупреждений):
public int get(TestContainer<T> container){
Test t = container.get();
return t._myVar;
}
Я погуглил и поискал в базе данных ошибок Oracle, но ничего не нашел по этому поводу...