java - 使用 java 反射访问静态嵌套类字段的字段抛出 NullPointerException

标签 java

Field field = (obj.getClass().getDeclaredClasses()[0])
                       .getDeclaredField("flowerName");//1
field.setAccessible(true);//2
field.set(null, "Rose");//3

在上面的第 3 行代码中,我得到了 NullPointerException

传递的类结构如下图

public class A{

    public static class B{
        protected String flowerName;
    }

}

我想在运行时使用 java 反射将值设置为此 flowerName 变量。 但它会抛出 NullPointerException。

我在某些地方提到过,其中已经指定当您尝试访问实例变量并在 set 方法中设置 null 时,如 set(null, "Rose"), 它会抛出空指针异常。 那么如何使用java反射在静态nexted类中设置flowerName的值。

最佳答案

仅仅因为类是静态的,并不意味着它的字段也是静态的。在您的情况下 flowerName 是非静态字段,因此它属于实例,而不是类,这意味着要设置它,您需要传递嵌套类的实例。

Class<?> nested = obj.getClass().getDeclaredClasses()[0];
Object instance = nested.newInstance();

Field field = nested.getDeclaredField("flowerName");// 1
field.setAccessible(true);// 2

field.set(instance, "Rose");// 3
System.out.println(field.get(instance));

关于java - 使用 java 反射访问静态嵌套类字段的字段抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27740505/

相关文章:

java - 如何部署 Play!从 Eclipse 到 GAE 的应用程序?

java - 如何断言表达式不编译

java - 当 SecurityManager.checkExit 抛出异常时,System.exit(0) 不会阻止最终被调用

java - 包含开头有 4 个空格的行组

java - 无法将 CSS 文件链接到 JSP

基于 Java 的支持流水线的 HTTP 客户端

java - 将 JList 复制到 arrayList 时出错

java - 将 java 类添加到 jython 作为 jython 导入模块

Java正则表达式分别匹配每个组

java - Java 5及以上版本的迭代器接口(interface)实现在哪里?