java set/get指定类的静态继承字段

Dan*_*vid 2 java static field inherited

我在以下情况:

public class SuperClass
{
        public static Object superClassStaticField;
}

public class ChildClass extends SuperClass
{
... some methods and fields
}
Run Code Online (Sandbox Code Playgroud)

我有一个看起来像这样的方法:

...modifiers... void action(Class <? extends SuperClass> cls)
{
...
}
Run Code Online (Sandbox Code Playgroud)

我想到达所有元素whit反射,包括超类静态字段,我(后来在ChildClass中)初始化,但看起来这里有一些逻辑在反射中失败:

superClassStaticField在Superclass中,所以如果我试图达到:

cls.getClass().get[Declared]Field("superClassStaticField");
Run Code Online (Sandbox Code Playgroud)

我会得到java.lang.NoSuchFieldException

所以我必须达到SuperClass的麻烦:

SuperClass.class.getDeclaredField("superClassStaticField").get(null);
Run Code Online (Sandbox Code Playgroud)

将成功运行,但如果有多个ChildClass在同一个运行时工作,我的程序变得疯狂.我认为beacuse所有方法都达到相同的对象,它在SuperClass中声明.

但是,我怎样才能达到实际给定的类静态字段?

我试过了:

SuperClass.class.getDeclaredField("superClassStaticField").get(cls);
Run Code Online (Sandbox Code Playgroud)

但结果是一样的.

我怎么能达到它?

编辑:我想现在只获取/设置静态字段,创建一个新实例是不安全的,(酸它有空构造函数?并且什么都不会修改?)

Jon*_*eet 6

但是,我怎样才能达到实际给定的类静态字段?

这里只有一个静态字段.每个子类最终不会有一个静态字段.听起来你需要采取不同的方法.我们不能就这种方法应该给你很多建议,因为我们不知道你想要实现什么.也许Map<Class, Object>你正在追求的是什么?