[英]Getting Inner Class Data using reflection
我有一個內班和一個外班。 使用Java反射,我想訪問內部類實例的數據。
public class OuterClass {
public OuterClass() {
super();
}
public OuterClass(InnerClass innerClass1, InnerClass innerClass2) {
super();
this.innerClass1 = innerClass1;
this.innerClass2 = innerClass2;
}
private InnerClass innerClass1;
private InnerClass innerClass2;
public class InnerClass {
public InnerClass() {
super();
}
public InnerClass(int id, String name, String rollNo) {
super();
this.id = id;
this.name = name;
this.rollNo = rollNo;
}
private int id;
private String name;
private String rollNo;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRollNo() {
return rollNo;
}
public void setRollNo(String rollNo) {
this.rollNo = rollNo;
}
}
public InnerClass getInnerClass1() {
return innerClass1;
}
public void setInnerClass1(InnerClass innerClass1) {
this.innerClass1 = innerClass1;
}
public InnerClass getInnerClass2() {
return innerClass2;
}
public void setInnerClass2(InnerClass innerClass2) {
this.innerClass2 = innerClass2;
}
}
主分類:-
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Reflection {
public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass1 = outerClass.new InnerClass(1, "Iftekhar", "1234");
OuterClass.InnerClass innerClass2 = outerClass.new InnerClass(2, "Ahmed", "123");
outerClass.setInnerClass1(innerClass1);
outerClass.setInnerClass2(innerClass2);
Field[] fields = outerClass.getClass().getDeclaredFields();
for (Field f : fields) {
Method method = OuterClass.InnerClass.class.getMethod("getId", null);
int id = (int) method.invoke(f, null);
System.out.println(id);
}
}
}
我預計輸出為1和2。但是我得到以下異常:-
Exception in thread "main" java.lang.IllegalArgumentException: object is not an instance of declaring class
我正在使用上面顯示的方法實例化內部Class屬性。有人可以幫我做錯什么。
您正在java.lang.reflect.Field
實例上調用getId()
。 而且java.lang.reflect.Field
不是OuterClass.InnerClass
的實例。
要解決此問題,您首先必須獲取字段的值,然后對該字段調用getId()
:
Field[] fields = outerClass.getClass().getDeclaredFields();
// We only have to find the method once and can reuse it
Method method = OuterClass.InnerClass.class.getMethod("getId");
// We have to call .setAccessible because the fields are private
AccessibleObject.setAccessible(fields, true);
for (Field f : fields) {
OuterClass.InnerClass value = (OuterClass.InnerClass) f.get(outerClass);
// At this point, you could also use value.getId();
int id = (int) method.invoke(value);
System.out.println(id);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.