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

Java 无法使用反射调用main方法-IllegalArgumentException:参数类型不匹配,java,reflection,Java,Reflection,我正在写一个学习反思的示例应用程序。我试图使用反射从另一个类调用一个类中定义的主方法,但是我得到了 线程“main”java.lang.IllegalArgumentException中出现异常:参数类型不匹配 在下面找到我试图执行的代码 从中调用主方法的类 import java.lang.reflect.Method; public class Invoker { public static void main(String[] args) throws Exception {

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

线程“main”java.lang.IllegalArgumentException中出现异常:参数类型不匹配

在下面找到我试图执行的代码

从中调用主方法的类

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

  }
调用的公共类
{
公共静态void main(字符串[]args){
如果(参数长度<3){
抛出新的IllegalArgumentException();
}
对于(int i=0;i
您就快到了:
参数的类型应该是
字符串[]
,而不是
对象[]

String[] params = new String[4];

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

试图将
Object[]
传递到
main(String[])
会导致您看到的错误。

方法签名是
String[]
,但
params
的运行时类型是
Object[]
。尝试:

Object[] params = new String[4]