Это продолжение поста Как получить доступ к методу из внешнего jar во время выполнения?
Макдауэлл ответил кодом:
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, перед вызовом я дал аргументам их собственный объект и перегрузил массивы, но все безуспешно. Кто-нибудь может объяснить, что я здесь делаю не так?
Спасибо,
Тодд