Aquí está un ejemplo simple de un código que compila utilizando Java 6, pero no compila en Java 7.Cambios en el acceso de las variables para las clases genéricas 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 logra compilar en el método get(TestContainer<T> container)
, con el error:
error: _myVar has private access in Test
no entiendo por qué esto ya no compila - en mi mente que debería. La variable t
es del tipo T
, que debe extenderse Test
. Está intentando acceder al campo _myVar
de una instancia de Test
desde dentro de la clase Test
.
De hecho, si cambio el método get(TestContainer<T> container)
a la siguiente, que compila (sin advertencias):
public int get(TestContainer<T> container){
Test t = container.get();
return t._myVar;
}
- ¿Por qué esto no pudiera compilar?
- ¿Esto es un error en Java 6? Si es así, ¿por qué?
- ¿Es esto un error en Java 7? comentario
He tenido un Google y búsquedas en la base de datos Oracle de errores, pero no he encontrado nada en este ...
Esto fue un error en Java 6: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7022052 – pingw33n
@ pingw33n, usted debe enviar una respuesta que a medida. –
@ pingw33n, y luego puedo aceptarlo ... aunque si alguien que tiene una mejor comprensión del JLS puede explicar la sección 'Evaluación' del informe de fallos, también lo agradecería. – amaidment