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



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

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

你差不多到了: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[])会导致您看到的错误。

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

Object[] params = new String[4]

相关内容

  • 没有找到相关文章

最新更新