Как вызвать метод с переменными аргументами в Java, используя отражение? - PullRequest
3 голосов
/ 13 января 2012

Я пытаюсь вызвать метод с переменными аргументами, используя отражение Java.Вот класс, в котором размещен метод:

public class TestClass {

public void setParam(N ... n){
    System.out.println("Calling set param...");
}

Вот код вызова:

try {
        Class<?> c = Class.forName("com.test.reflection.TestClass");
        Method  method = c.getMethod ("setParam", com.test.reflection.N[].class);
        method.invoke(c, new com.test.reflection.N[]{});

Я получаю исключение IllegalArgumentException в виде «неправильного числа аргументов» в последней строкегде я звоню, вызываю.Не уверен, что я делаю неправильно.

Любые указатели будут оценены.

  • Спасибо

Ответы [ 2 ]

13 голосов
/ 13 января 2012
public class Test {

public void setParam(N... n) {
    System.out.println("Calling set param...");
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws Exception {
    Test t=new Test();
    Class<?> c = Class.forName("test.Test");
    Method  method = c.getMethod ("setParam", N[].class);
    method.invoke(t, (Object) new N[]{});
}
}

У меня работает.

  1. Примените свой N [] к объекту
  2. вызовите экземпляр, а не класс
3 голосов
/ 13 января 2012

В вашем фрагменте кода нет экземпляра TestClass, для которого вызывается метод. Вам нужен экземпляр из TestClass, а не только сам TestClass. Вызовите newInstance() на c и используйте результат этого вызова в качестве первого аргумента method.invoke().

Кроме того, чтобы убедиться, что ваш массив рассматривается как один аргумент, а не как переменные, вам необходимо привести его к Object:

m.invoke(testClassInstance, (Object) new com.test.reflection.N[]{});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...