Änderungen beim Zugriff auf Variablen für generische Klassen in Java 7
Hier ist ein einfaches Beispiel für einen Code, der mit Java 6 kompiliert wird, jedoch nicht in Java 7 kompiliert wird.
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;
}
}
}
In Java 7 kann es in der nicht kompiliert werdenget(TestContainer<T> container)
Methode, mit dem Fehler:
Fehler: _myVar hat in Test privaten Zugriff
Ich verstehe nicht, warum dies nicht mehr kompiliert wird - in meinen Augen sollte es so sein. Die Variablet
ist vom TypT
, die sich verlängern müssenTest
. Es versucht, auf das Feld zuzugreifen_myVar
einer Instanz vonTest
aus der KlasseTest
.
In der Tat, wenn ich die Methode ändereget(TestContainer<T> container)
Folgendes wird kompiliert (ohne Warnungen):
public int get(TestContainer<T> container){
Test t = container.get();
return t._myVar;
}
Warum kompiliert das nicht mehr?War das ein Fehler in Java 6? Wenn ja warum?Ist das ein Fehler in Java 7?Ich hatte ein Google-Konto und habe in der Oracle-Bug-Datenbank gesucht, aber nichts dazu gefunden ...