无法使用Reflection调用main方法 - IllegalArgumentException:参数类型不匹配

Bal*_*pal 2 java reflection

我正在编写一个学习反思的示例应用程序.我试图使用反射从另一个类调用一个类中的main方法,但我得到了

线程"main"中的异常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 });
}
Run Code Online (Sandbox Code Playgroud)

要调用其主要方法的类

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] + "]");
    }
  }

  }
Run Code Online (Sandbox Code Playgroud)

das*_*ght 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";
Run Code Online (Sandbox Code Playgroud)

尝试传递Object[]main(String[])导致您看到的错误.


Jav*_*ier 5

方法签名是String[]但运行时型paramsIS Object[].尝试:

Object[] params = new String[4]
Run Code Online (Sandbox Code Playgroud)