Zmiany w dostępie do zmiennych dla klas ogólnych w Javie 7
Oto prosty przykład jakiegoś kodu, który kompiluje za pomocą Java 6, ale nie kompiluje się w Javie 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;
}
}
}
W Javie 7 nie można go skompilować wget(TestContainer<T> container)
metoda z błędem:
error: _myVar ma prywatny dostęp w teście
Nie rozumiem, dlaczego to już się nie kompiluje - moim zdaniem powinno. Zmiennat
jest typuT
, która musi się rozciągaćTest
. Próbuje uzyskać dostęp do pola_myVar
instancjiTest
z klasyTest
.
Rzeczywiście, jeśli zmienię metodęget(TestContainer<T> container)
poniżej kompiluje się (bez ostrzeżeń):
public int get(TestContainer<T> container){
Test t = container.get();
return t._myVar;
}
Dlaczego to się już nie kompiluje?Czy to był błąd w Javie 6? Jeśli tak, dlaczego?Czy jest to błąd w Javie 7?Mam google i szukam w bazie danych błędów Oracle, ale nie znalazłem nic na ten temat ...