Actualmente estoy jugando con introspección y anotaciones en Java 1.5. Tienen una clase abstracta principal AbstractClass. Las clases heredadas pueden tener atributos (del tipo ChildClass) anotados con una anotación personalizada @ChildAttribute.Excepción de acceso ilegal al intentar acceder a attibrute desde la clase principal por introspección
Quería escribir un método genérico que enumerara todos los atributos @ChildAttribute de una instancia.
Aquí está mi código hasta ahora.
La clase padre:
public abstract class AbstractClass {
/** List child attributes (via introspection) */
public final Collection<ChildrenClass> getChildren() {
// Init result
ArrayList<ChildrenClass> result = new ArrayList<ChildrenClass>();
// Loop on fields of current instance
for (Field field : this.getClass().getDeclaredFields()) {
// Is it annotated with @ChildAttribute ?
if (field.getAnnotation(ChildAttribute.class) != null) {
result.add((ChildClass) field.get(this));
}
} // End of loop on fields
return result;
}
}
Una aplicación de prueba, con un poco de niño atribuye
public class TestClass extends AbstractClass {
@ChildAttribute protected ChildClass child1 = new ChildClass();
@ChildAttribute protected ChildClass child2 = new ChildClass();
@ChildAttribute protected ChildClass child3 = new ChildClass();
protected String another_attribute = "foo";
}
La prueba en sí:
TestClass test = new TestClass();
test.getChildren()
me sale el siguiente error:
IllegalAccessException: Class AbstractClass can not access a member of class TestClass with modifiers "protected"
Pensé que el acceso de introspección no se preocupaba por los modificadores, y podía leer/escribir incluso a los miembros privados. Parece que no es el caso.
¿Cómo puedo acceder a los valores de estos atributos?
Gracias de antemano por su ayuda,
Raphael
velocidad de la luz! Gracias! –