Ä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 ...

Antworten auf die Frage(3)

Ihre Antwort auf die Frage