目次

リフレクション

  • リフレクションメソッドではビットフィールドを使用して、フィールド、クラス、コンストラクタ、メソッドの修飾子を格納する。abstractのビット、finalのビットなどが存在している。

privateフィールドの書き換え

Field field_ = [対象クラス].class.getDeclaredField("[フィールド名]");
field_.setAccessible(true);
field_.set([対象クラスのインスタンス], [設定したい値]);

privateフィールドのコレクションに値を設定

 ここではコレクションはHashtable<String, ○○Object>とする。

Field field_ = [対象クラス].class.getDeclaredField("[コレクション名]");
field_.setAccessible(true);
Hashtable<String, ○○Object> hash = (Hashtable<String, ○○Object>) field_.get(this);

// 後はhashに普通に値を設定すればよい.
hash.put("key", △);

クラスのインスタンスを簡単に取得できないとき

  • 例えばユーティリティクラスのときのように外部からインスタンスを得ることができないとき。
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
 
 
 
 
Constructor<[実行するメソッドを持つクラス]> cons = [実行するメソッドを持つクラス].class.getDeclaredConstructor();
        cons.setAccessible(true);
        Object obj = cons.newInstance();
        // objに対して、上記のinvoke()を実行する.