使用反射获取内部类字段值

普拉哈尔·阿加瓦尔

我正在尝试使用反射访问内部类字段值。

假设课程是:-

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何通过反射获取内部类中存在的枚举的值

来自分类Dev

使用反射获取C#字段的值

来自分类Dev

如何使用反射获取字段值?

来自分类Dev

如何使用反射获取关联字段的值

来自分类Dev

从内部类获取变量的值

来自分类Dev

Java,反射,内部类,

来自分类Dev

使用反射获取字段的值时获取异常

来自分类Dev

如何从registerReceiver内部类获取变量的值

来自分类Dev

从内部类中获取arraylist的值

来自分类Dev

如何从registerReceiver内部类获取变量的值

来自分类Dev

当使用反射实例化内部类时,InstantiationException。为什么?

来自分类常见问题

如何在Java中使用反射实例化内部类?

来自分类Dev

使用反射具有参数调用内部类方法

来自分类Dev

Java-如何使用反射实例化内部类?

来自分类Dev

使用反射设置字段值

来自分类Dev

Java反射-获取字段值

来自分类Dev

使用反射获取元组的值

来自分类Dev

使用反射获取结构字段的名称

来自分类Dev

使用反射,获取对象的父类/字段

来自分类Dev

使用Java反射获取字段信息

来自分类Dev

使用反射获取字段的通用类型

来自分类Dev

Java枚举匿名内部类和反射

来自分类Dev

从内部类访问外部类的字段

来自分类Dev

在内部类 Kotlin 中获取外部值

来自分类Dev

使用protobuf反射来获取c ++中的布尔值字段描述符

来自分类Dev

C#:使用反射获取名称的字段/属性/方法值(字符串或uint)

来自分类Dev

使用Kotlin中的泛型类型的反射来获取静态字段的值

来自分类Dev

如何使用反射在库中存在的此内部类上调用方法?

来自分类Dev

从外部类通过内部类实例访问外部类字段

Related 相关文章

热门标签

归档