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/