我目前在Java 1.5中使用自省和註釋。 有一個父抽象類抽象類。 繼承的類可以具有用自定義@ChildAttribute批註註釋的屬性(類型爲ChildClass)。嘗試通過自檢從父類訪問attibrute時出現非法訪問異常
我想寫一個通用的方法,將列出一個實例的所有@ChildAttribute屬性。
這是我的代碼到目前爲止。
的父類:
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;
}
}
的測試執行,一些孩子的屬性
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";
}
測試本身:
TestClass test = new TestClass();
test.getChildren()
我收到以下錯誤:
IllegalAccessException: Class AbstractClass can not access a member of class TestClass with modifiers "protected"
我認爲反省訪問不關心修飾符,甚至可以讀/寫私人members.It似乎並非如此。
如何訪問這些屬性的值?
預先感謝您的幫助,
拉斐爾
光速! 謝謝! – 2010-08-13 13:12:26