[英]Getting inner class field values using reflection
我試圖使用反射訪問內部類字段值。
假設這些類是:
public class OuterClass {
int a;
public class InnerClass {
int b;
InnerClass(int b){
this.b = b;
}
}
public void setInnerField(int val){
InnerClass a = new InnerClass(val);
}
}
主要功能有:
OuterClass obj = new OuterClass();
obj.a = 10;
obj.setInnerField(5);
以下是我試圖獲取內部類字段值的內容,即b引用自我如何使用Java中的反射來訪問內部類變量值?
Class[] classes = obj.getClass().getDeclaredClasses();
for(Class innerClass: classes){
//System.out.println(innerClass.getName());
Field[] fields = innerClass.getDeclaredFields();
for(Field field : fields){
//System.out.println(field.getName());
System.out.println(field.get(obj)); //<-----IllegalArgumentException
//Tried with below line too as suggested in above link
System.out.println(field.get(innerClass.getInterfaces())); //<-----IllegalArgumentException
}
}
那么在運行時訪問內部類字段值的方法有哪些呢?
您的代碼引發IllegalArgumentException,因為:
`System.out.println(field.get(obj));
System.out.println(field.get(innerClass.getInterfaces()));// your inner class does not implement any interfaces which result in [] as an arg`
您傳遞給get方法的obj arg必須與聲明您調用的get字段的類型相同,在此情況下為OuterClass $ InnerClass。 b
這已經記錄在get方法中:
如果指定的對象不是聲明基礎字段的類或接口的實例,則該方法將引發IllegalArgumentException。
您可以將您的內部類及其內部字段聲明為靜態,或者您可以將內部類的實例聲明為arg並將其作為arg傳遞給field.get( innerInstance ),當您在內部類字段上調用它時
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.