[英]Using Java reflection, can I access a private field of type private static nested class?
[英]Using java reflection to access field of static nested class's fields throws NullPointerException
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));
首先检查如何实例化静态内部类 。 在你做完之后,就这样走吧:
//obj is instance of your inner static class.
Field field = (obj.getClass().getDeclaredField("flowerName");
field.setAccessible(true);
field.set(obj, "Rose");
您不能将Value设置为“null”对象。 请查看java docs中的方法描述 ,以了解出现了什么问题。
正常行为,第一个参数是set方法将被应用的objct。
使用常规Java代码,您尝试执行以下操作:
B b = null;
B.setFlower(value);
b为null,因此将抛出NullPointerException。
您必须在第3行传递非null对象而不是null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.