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

时间:2009-08-24 20:18:53

标签: java reflection runtime

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

的延续

McDowell用代码回复:

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

然而,而不是看到

TEST1
TEST2

我得到以下异常:

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

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

谢谢, 托德

1 个答案:

答案 0 :(得分:3)

这是varargs的问题!

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