
1.リフレクションを使い、値をセット(BeanのSetterメソッドにて)
2.1でセットした値を取得するために、下記コードで取得
Method Method = Class.getMethod("getLstData");
Object obj = Method.invoke(****);
上記の****の箇所には、メソッドのあるクラスのインスタンスを渡す、
というところまでは分かりますが、newInstance()してしまうと、新しいオブジェクトになってしまうので
値が取得できません。
error>>java.lang.IllegalArgumentException: object is not an instance of declaring class
どのようにすれば、値の取得が可能でしょうか。
どなたかご教授いただければと思います。
※Java 1.5を使用
No.1ベストアンサー
- 回答日時:
リフレクションを使う必要のないプログラムだったらどうやるか考えてみてください。
x.setLstData(...);
他の処理
obj = x.getLstData(...);
setLstData()を呼んでからgetLstData()を呼ぶまでの間にx=new XXX();を実行することはありませんよね?
それと同じです。
getLstData()を呼ぶまで、値がセットされたオブジェクトへの参照をどこかに残しておけばいいのです。
> java.lang.IllegalArgumentException: object is not an instance of declaring class
このエラーはMethod.invoke()で出ているものでしょうか?
もしそうなら、メッセージのとおりinvoke()に渡しているレシーバオブジェクトのクラスが合っていないだけだと思われます。
つまり、クラスAのメソッドをinvoke()するのに、クラスBのオブジェクトをレシーバに指定している && クラスBはクラスAと継承関係がない、とか。
回答ありがとうございます。
>値がセットされたオブジェクトへの参照をどこかに残しておけばいいのです。
原因として、オブジェクトではなく、Classを持ちまわってたので
できませんでした。オブジェクトにすることで解決しました。
ありがとうございます。
No.2
- 回答日時:
こんにちは。
まず、値の取得についての質問の回答ですが、
リフレクションを使い値をセットするクラスと、
セットした値を取得するクラスのインスタンスを同じにします。
例外は、JavaAPIに「不正な引数、または不適切な引数をメソッドに渡したことを示すためにスローされます。」と記述があるので、恐らく値の設定メソッドを呼び出す際に、引数の指定がないからだと思います。
サンプルのプログラムを作ってみましたので、確認してみて下さい。
public class QA4714393 {
private String data;
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public static void main(String[] args) {
Method method;
try {
QA4714393 clazz = QA4714393.class.newInstance();
method = QA4714393.class.getMethod("setData", String.class);
method.invoke(clazz, "100");
method = QA4714393.class.getMethod("print");
method.invoke(clazz);
} catch (Exception e) {
e.printStackTrace();
}
}
public void print() {
System.out.println(getData());
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クラス間でのデータ参照
-
無名パッケージからのインポート
-
サブクラスで.newInstance()で...
-
JTable ArrayList 表示されない
-
C#にて別クラスの関数を使いたい
-
範囲外の数値を代入したらエラ...
-
構造 他のクラスの構造体を別...
-
visual studioのデザイナ画面で...
-
JSPでbeanプロパティ(配列)を...
-
関数内の変数に<summary>コメン...
-
FilterReader クラスのカスタム...
-
僕の出身中学校は200人同級生が...
-
「タイプ初期化子が例外をスロ...
-
エクセルVBAで、条件に一致する...
-
今日は こどもの日 で、良い天...
-
配列のメソッド
-
複数の変数を宣言する時、同時...
-
変数名の付け方
-
final修飾子を使っているのに、...
-
mainメソッドのthrows節で設定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス間でのデータ参照
-
範囲外の数値を代入したらエラ...
-
関数内の変数に<summary>コメン...
-
C#にて別クラスの関数を使いたい
-
c++,ある関数のクラスから別の...
-
構造 他のクラスの構造体を別...
-
C#でほかのファイルにある自作...
-
C++でfriendクラスにしているの...
-
import と extends について
-
Java リフレクションについて
-
無名パッケージからのインポート
-
visual studioのデザイナ画面で...
-
ひとつのファイルにクラスは1つ?
-
違うクラスからの変数の共有化
-
C#のクラスライブラリでメッセ...
-
継承したクラス側のクラス名の取得
-
Java
-
java-別クラスの変数の使い方を...
-
C# インターフェイスの実装
-
デシリアライズでオブジェクト...
おすすめ情報