我正在尝试使用反射访问内部类字段值。
假设这些类是: -
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 参考How i can access inner class variable value using reflection in 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
}
}
那么在运行时访问内部类字段值的方法是什么?
答案 0 :(得分:0)
您的代码抛出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必须是声明你调用的字段的相同类型,在这种情况下是OuterClass $ InnerClass。 b
已经记录了get方法:
如果指定的对象不是声明基础字段的类或接口的实例,则该方法抛出IllegalArgumentException。
要么将您的内部类及其字段声明为静态,要么您拥有内部类的实例,并将其作为arg传递给field.get( innerInstance )在内部类字段上调用它