Ich spiele gerade mit Introspektion und Anmerkungen in Java 1.5. Die Eltern haben eine abstrakte Klasse AbstractClass. Die geerbten Klassen können Attribute (vom Typ ChildClass) haben, die mit einer benutzerdefinierten @ChildAttribute Annotation versehen sind.Ungültige Zugriffsausnahme beim Zugriff auf attibrute von der Elternklasse durch Introspektion
Ich wollte eine generische Methode schreiben, die alle @ChildAttribute Attribute einer Instanz auflisten würde.
Hier ist mein Code so weit.
Die Elternklasse:
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;
}
}
Eine Testimplementierung, mit einigen Kind Attribute
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";
}
Der Test selbst:
TestClass test = new TestClass();
test.getChildren()
ich die folgende Fehlermeldung erhalten:
IllegalAccessException: Class AbstractClass can not access a member of class TestClass with modifiers "protected"
Ich dachte, dass Introspektion Zugriff nicht Modifikatoren interessiert, und konnte sogar private Mitglieder lesen/schreiben. Es scheint, dass es nicht der Fall ist.
Wie kann ich auf die Werte dieser Attribute zugreifen?
Vielen Dank im Voraus für Ihre Hilfe,
Raphael
Lichtgeschwindigkeit! Danke! –