2

リフレクションを学習するためのサンプル アプリケーションを作成しています。リフレクションを使用して、あるクラスで定義されたメインメソッドを別のクラスから呼び出そうとしていますが、取得しています

スレッド「メイン」の例外 java.lang.IllegalArgumentException: 引数の型が一致しません

実行しようとしているコードの下を見つけてください。

main メソッドが呼び出されるクラス

import java.lang.reflect.Method;
public class Invoker {


public static void main(String[] args) throws Exception {
    Class clazz = Class.forName("com.nagpal.invokemainmethod.Invoked");

    Method method = clazz.getMethod("main", new Class[] { String[].class });

    Object[] params = new Object[4];

    params[0] = "arg 1";
    params[1] = "arg 2";
    params[2] = "arg 3";
    params[3] = "arg 4";

    method.invoke(null, new Object[] { params });
}

メインメソッドを呼び出すクラス

public class Invoked {


public static void main(String[] args) {
    if (args.length < 3) {
        throw new IllegalArgumentException();
    }

    for (int i = 0; i < args.length; i++) {
        System.out.println("args[" + args[i] + "]");
    }
  }

  }
4

2 に答える 2

6

あなたはほとんどそこにいます:のタイプは、ではなく、あるparamsべきです:String[]Object[]

String[] params = new String[4];

params[0] = "arg 1";
params[1] = "arg 2";
params[2] = "arg 3";
params[3] = "arg 4";

に渡そうとObject[]するmain(String[])と、表示されるエラーが発生します。

于 2013-02-28T15:33:02.987 に答える
5

メソッドのシグネチャはですString[]が、の実行時型はparamsですObject[]。試す:

Object[] params = new String[4]
于 2013-02-28T15:33:18.317 に答える