我处于以下情况:
public class SuperClass
{
public static Object superClassStaticField;
}
public class ChildClass extends SuperClass
{
... some methods and fields
}
我有一个看起来像这样的方法:
...modifiers... void action(Class <? extends SuperClass> cls)
{
...
}
我想达到所有带有反射的元素,包括我(稍后在 ChildClass 中)初始化的超类静态字段,但看起来这里有些逻辑在反射中失败:
superClassStaticField 在超类中,所以如果我尝试使用:
cls.getClass().get[Declared]Field("superClassStaticField");
我会得到 java.lang.NoSuchFieldException
所以我必须达到超类的真相:
SuperClass.class.getDeclaredField("superClassStaticField").get(null);
会成功,但如果有多个 ChildClass 在同一个运行时工作,我的程序会发疯。我认为因为所有方法都达到了在 SuperClass 中声明的相同对象。
但是我怎样才能达到实际给定的类静态字段?
我试过:
SuperClass.class.getDeclaredField("superClassStaticField").get(cls);
但结果是一样的。
我怎样才能达到它?
编辑:我现在只想获取/设置静态字段,创建一个新实例是不安全的,(酸它有空的构造函数?并且什么都不会修改?)