次のステートメントを使用してクラスをロードしています。
Class classToLoad = Class.forName("com.somePackage.SomeotherPackage.classname" );
後で、リフレクションを使用してこのクラスのメソッドを取得します。methodname.invoke() 関数を使用してメソッドを呼び出すには、ロードされたクラスのオブジェクトが必要です。したがって、ロードされたクラスのオブジェクトを作成したいと思います。私はこのようにしようとしています:
Object obj = classToLoad.newInstance();
しかし、これの問題は、この方法ではロードされたクラスのオブジェクトを取得できず、Object クラスのオブジェクトを取得することです。
ロードされたクラスの関数を呼び出したい場合は、次のようにします。
methodName.invoke(obj);
それは例外をスローします:
java.lang.IllegalArgumentException: オブジェクトは宣言クラスのインスタンスではありません
誰でも助けてもらえますか?
問題の更新:
問題は、割り当ての左側を別のクラス タイプにする必要があり、そのクラス タイプは実行時に決定されることです。
以下のステートメントの場合:
オブジェクト インスタンス = clazz.newInstance();
「インスタンス」は「オブジェクト」クラスではなく、「クラズ」タイプである必要があります。
どうすればこれを達成できますか?