Cambios en el acceso de variables para clases genéricas en Java 7
Aquí hay un ejemplo simple de algún código que compila usando Java 6, pero no compila en 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;
}
}
}
En Java 7, no se compila en elget(TestContainer<T> container)
Método, con el error:
error: _myVar tiene acceso privado en Test
No entiendo por qué esto ya no se compila, en mi opinión debería serlo. La variablet
es de tipoT
, que debe extenderseTest
. Se trata de acceder al campo._myVar
de una instancia deTest
desde dentro de la claseTest
.
De hecho, si cambio el métodoget(TestContainer<T> container)
a lo siguiente, compila (sin advertencias):
public int get(TestContainer<T> container){
Test t = container.get();
return t._myVar;
}
¿Por qué esto ya no compila?¿Fue este un error en Java 6? Si es así, ¿por qué?¿Es este un error en Java 7?He tenido un google y he buscado en la base de datos de errores de Oracle, pero no he encontrado nada en este ...