私は次の状況にいます:
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);
しかし、結果は同じです。
どうすれば到達できますか?
編集:静的フィールドのみを取得/設定したいのですが、新しいインスタンスを作成するのは安全ではありません(空のコンストラクターがあり、何も変更しませんか?)