※ ChatGPTを利用し、要約された質問です(原文:リフレクション)
リフレクションでメソッドを実行するサンプル作成でエラーが発生
このQ&Aのポイント
Webアプリ上でリフレクションにてとあるクラスのメソッドを実行するサンプルを作成しましたが、うまく動きません。
Exceptionが発生し、java.lang.IllegalArgumentException: object is not an instance of declaring classと表示されてしまいます。
作成したサンプルの最後のmethod.invoke()の処理にてエラーが発生しています。原因が分かりますか?
Webアプリ上でリフレクションにてとあるクラスのメソッドを実行するサンプルを作成して
見たのですがうまく動きませんでした。最後のmethod.invoke()の処理にてExceptionが発生し、
java.lang.IllegalArgumentException: object is not an instance of declaring class
と表示されてしまいます。
作成したサンプルは下記なのですがどこが原因かお分かりになりますでしょうか。
try {
Class cls = Class.forName("dao.TestDao");
// 引数の型をセット
Constructor constructor = cls.getDeclaredConstructor(HttpSession.class);
constructor.setAccessible(true);
// 引数を渡してオブジェクトを生成
Object obj = constructor.newInstance(session);
Method method = cls.getDeclaredMethod("getDataDao", int.class);
method.setAccessible(true);
Object result = method.invoke(cls, new Integer(100));
} catch (Exception e) {
e.printStackTrace();
}
// このクラスのgetDataDao()をリフレクションにて実行
public class TestDao {
HttpSession session = null;
public TestDao(HttpSession session)
{
this.session = session;
}
public List<String> getDataDao(int iNo) {
List<String> list = new ArrayList<String>();
list.add((String)session.getAttribute("1"));
list.add((String)session.getAttribute("2"));
list.add((String)session.getAttribute("3"));
list.add((String)session.getAttribute("4"));
list.add((String)session.getAttribute("5"));
return list;
}
}
お礼
>>「リフレクションを使わない場合」の test に対応するオブジェクトは, リフレクションを使った場合のどれですか? ご回答ありがとうございます。 「リフレクションを使わない場合」の test に対応するオブジェクトは Object obj = constructor.newInstance(session); で取得したobjであるため method.invoke(obj, new Integer(100)); としたところ実行できました。ありがとうございました。