• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:リフレクション Method.invoke() 時のインスタンス変数)

リフレクション Method.invoke() 時のインスタンス変数

このQ&Aのポイント
  • リフレクションAPIを使用してフレームワークを使いやすく構築しようとしている際に、Method.invoke()でbeanクラスのメソッドを呼び出す際にインスタンス変数の値が正しく取得できない問題が発生しています。
  • invokeしたメソッド内で自分自身のインスタンス変数の値を取得することはできないのでしょうか。
  • invokeの引数にbeanを渡しているため、インスタンス変数の値を取得できると思っているが、デバッグした結果、メソッド内でのインスタンス変数の値は全てnullとなってしまっている。

質問者が選んだベストアンサー

  • ベストアンサー
  • sh_hirose
  • ベストアンサー率66% (56/84)
回答No.1

うまくいくはずですが? beanクラスも提示したほうが回答が得られると思いますが? // main package sample; import java.lang.reflect.Method; public class Test { public static void main(String[] args) { try { Bean bean = new Bean(); System.out.println("value: " + bean.value); bean.setValue(); System.out.println("value: " + bean.value); Method method = Bean.class.getMethod("valid"); if( void.class.equals(method.getReturnType()) ) { method.invoke(bean); System.out.println("value: " + bean.value); } } catch( Exception e ) { e.printStackTrace(); } } } // bean package sample; public class Bean { public String value = null; public void setValue() { this.value = "test"; } public void valid() { this.value = "sample"; } }

hatimiti
質問者

お礼

ご回答ありがとうございます。 こちら色々と試している内に、おおよその原因がわかりました。 bean オブジェクトを springframework の管理下に置いているのですが、 public メソッド(valid)に対して aop によるインターセプトが発生し、 予期せぬ動作になっているようです。 public final とし、spring 側でオーバライドできなくすれば、 期待通りの動きになるようですが、それはそれで業務側でオーバライドできなくなってしまうため、現在別の策を調査中です。 大変お手数おかけしました。 こちらのソースコードも参考にさせていただきます。

すると、全ての回答が全文表示されます。

関連するQ&A