java - 如何在运行时从外部 jar 访问方法(第 2 部分)?

标签 java reflection runtime

这是帖子 How does one access a method from an external jar at runtime? 的延续

麦克道尔回复了代码:

public class ReflectionDemo {

public void print(String str, int value) {
    System.out.println(str);
    System.out.println(value);
}

public static int getNumber() { return 42; }

public static void main(String[] args) throws Exception {
   Class<?> clazz = ReflectionDemo.class;
   // static call
   Method getNumber = clazz.getMethod("getNumber");
   int i = (Integer) getNumber.invoke(null /* static */);
   // instance call
   Constructor<?> ctor = clazz.getConstructor();
   Object instance = ctor.newInstance();
   Method print = clazz.getMethod("print", String.class, Integer.TYPE);
    print.invoke(instance, "Hello, World!", i);
  }
}

我添加了以下方法:

public void print2(String[] strs){
  for(final String string : strs ){
      System.out.println(string);
  }
}

并修改 main 以包含这两行:

Method print2 = clazz.getDeclaredMethod("print2", new Class[]{String[].class});
print2.invoke(instance, new String[]{"test1", "test2"});

但是,而不是看到

测试1
测试2

我收到以下异常:

线程“main”中的异常 java.lang.IllegalArgumentException:参数数量错误

我已经阅读了 Sun Java 教程,在调用之前为参数提供了它们自己的对象,并且重新加载了数组,但都没有成功。谁能解释一下我在这里做错了什么?

谢谢, 托德

最佳答案

这就是可变参数的问题!

print2.invoke(instance, new Object[] { new String[] {"test1", "test2"}});

关于java - 如何在运行时从外部 jar 访问方法(第 2 部分)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1324511/

相关文章:

java - 使用 Java 打开和编辑 .jar 中的文件?

java - 如何使用图像创建 XFDF 注释

Scala:获取对象类名称的正确方法?

Stm32F103 Arm 运行时系统,GNAT Ada 编译器

java - 如何在将要翻转的 Windows 中读取日志文件?

reflection - 如何使用 KClass 反射区分 Kotlin 中的类和接口(interface)

c# - 方法调用的所有引用的集成测试

css - 如何在不将图像嵌入外部样式表的情况下将图像用于皮肤

c++ - 运行时检查失败 #3 - 变量 'menuChoice' 未经初始化就被使用

java - Java线程中的 "blocked Count"和 "Waited Count"是什么意思?