我正在尝试使用反射访问内部类字段值。
假设课程是:-
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。乙
这已经记录了 get 方法:
如果指定的对象不是声明基础字段的类或接口的实例,则该方法将引发 IllegalArgumentException。
要么将内部类及其字段声明为静态,要么将内部类的实例作为参数传递给 field.get( innerInstance ),当您在内部类字段上调用它时
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句