0

オブジェクト インスタンスでそのメソッドを呼び出さずに、リフレクションを使用してクラスの静的メンバーを取得できますか?

言い換えると:

 public class MuchoStatic {

    private static staticMember;

    getStaticMember(){

    return this.staticMember;

    }
    } //end class

さらにコードがあります:

Method m = null;

try{

  m = MuchoStatic.class.getMethod("getStaticMember",null);

} catch (Exception e) {

}

Object o = null;
try{

 o = m.invoke(MuchoStatic.class,null);

} catch (Exception e) {

}

不正な引数の例外が発生しています。これは、Class オブジェクトを呼び出しメソッドに渡しているためだと思います。オブジェクト o が実際にインスタンス化されていることがわかりますが、例外は引き続きスローされます。

私たちはこれを行うことができるべきではありませんか?

4

3 に答える 3

6

オブジェクト インスタンスでそのメソッドを呼び出さずに、リフレクションを使用してクラスの静的メンバーを取得できますか?

もちろん静的なので。

Object o = null;
try {
    Method m = MuchoStatic.class.getMethod("getStaticMember");
    m.setAccessible(true);
    o = m.invoke(null);

} catch (Exception e) {
    // don't ignore the exception as it may be trying to tell you something
    throw new AssertionError(e);
}
于 2013-09-26T20:29:55.567 に答える
2

静的メソッドを呼び出すためにインスタンスは必要ありません。また、引数を取らないため、単純に

o = m.invoke(null);

ただし、クラスが同じパッケージにない場合は、メソッドがパッケージ プライベートとして宣言されているため、問題が発生します。電話する必要があるかもしれません

m.setAccessible(true);

前にinvoke()

于 2013-09-26T20:28:13.560 に答える