![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
現在リフレクションAPIを使用してフレームワークを
使いやすく構築しようとしているのですが、
以下の例の抜粋コードで、一点わからないことがあります。
1:Object bean = beanField.get(action);
2:Class<?> beanClass = bean.getClass();
3:Method validMethod = beanClass.getMethod("valid");
4:if (void.class.equals(validMethod.getReturnType())) {
5: // void 型
6: validMethod.invoke(bean);
7:}
6行目の invoke() で bean クラスの valid メソッドを呼び出しています。この時点でデバッグしたところ、bean が保持しているインスタンス変数に値が正常に格納されているのですが、
実際に bean.valid() メソッド内にデバッグが進んだ時、bean 内のインスタンス変数が全て null となってしまっています。
invoke したメソッド(ここではvalid)内で、自分自身(bean)のインスタンス変数値を取得することはできないのでしょうか。
invoke の引数に bean を渡しているから、取れる気がするのですが、、
お分かりになればどうかご教示ください。
以上、よろしくお願いいたします。
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";
}
}
ご回答ありがとうございます。
こちら色々と試している内に、おおよその原因がわかりました。
bean オブジェクトを springframework の管理下に置いているのですが、
public メソッド(valid)に対して aop によるインターセプトが発生し、
予期せぬ動作になっているようです。
public final とし、spring 側でオーバライドできなくすれば、
期待通りの動きになるようですが、それはそれで業務側でオーバライドできなくなってしまうため、現在別の策を調査中です。
大変お手数おかけしました。
こちらのソースコードも参考にさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- その他(プログラミング・Web制作) どうしてもエラーが解決できません。 1 2022/07/23 04:32
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
中カッコ{}だけの記述について
-
変数を動的に利用するには?
-
インタフェイス実装と抽象クラ...
-
Javaでlog4jを使ってログ出力を...
-
Socketの接続のタイムアウトを...
-
javaに関する質問です
-
javaのプログラミングで作るRPG...
-
プログラミングの問題です。大...
-
URIからURIへの相対URIの求め方
-
eclipseのコンソール
-
JavaのEnum型について
-
リフレクション Method.invoke(...
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
-
[JAVA]try 内の変数を外で!?
-
JSPやサーブレットでSystem.out...
-
ダブルクォーテーションのrepla...
-
C言語32bitから64bitの移行につ...
-
javaで質問です。 文字列2023/2...
-
VBAで配列の計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数を動的に利用するには?
-
プログラミングの問題です。大...
-
中カッコ{}だけの記述について
-
Javaでlog4jを使ってログ出力を...
-
NoSuchMethodErrorが解決できま...
-
Socketの接続のタイムアウトを...
-
コンストラクタの引数の中のnew?
-
javaのプログラミングで作るRPG...
-
System.exit()の値を取得したい
-
JSP/Servletのパラメータの受け...
-
Processing :指定フォルダ内の...
-
javaで特定の文字列から特定の...
-
インタフェイス実装と抽象クラ...
-
Javaで日本語の出力が文字化けする
-
randomで
-
StringクラスのcompareToメソッド
-
【初心者です】javaで平均値を...
-
DESを使用した暗号化/復号化処...
-
初心者なので教えてほしいです。
-
ArrayList でスタックを
おすすめ情報