JRubyでJavaのクラスをいじり倒す。

Javaのプログラムの変更は容易にはできないんですが、JRubyをしこんでおくと、ささっとプログラムを書き換えて実行させることができます。

そのときに非常に協力なのが、クラスの内部のデータへの動的アクセス
通常のJavaならreflectのクラスを利用すると、プライベートデータにアクセスしたり自由自在にできます。
同じことがJRubyでもできます。
とはいえJavaと同じ方法でできるわけではないです。

というわけでやり方。
static重視

  • クラスオブジェクトの取得
clazz = (com.ttProject.library.Myclass).java_class;

  • メソッド一覧の取得方法
puts(clazz.methods);

  • メソッド
method = clazz.declared_method("myMethod");

  • コンストラクタ
constructor = clazz.declared_constructor();

  • オブジェクトの生成
instance = constructor.new_instance();
instance = constructor.new_instance("引数1", "引数2" ...);

  • データ一覧の取得方法
puts(clazz.fields);

  • データの取得
val = clazz.declared_field("variable");
puts(val.static_value);

  • データの設定
val = clazz.declared_field("variable");
val.set_value([クラスオブジェクト], [設定する値]);
シングルトンの場合は、適当なものを何かクラスオブジェクトとして設置しておけば問題ないみたい。

とりあえず今わかっているのは、このくらいです。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年02月26日 21:12
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。