вызвать метод аргумента переменной с помощью отражения - PullRequest
0 голосов
/ 09 декабря 2018
public String testa(Object... args){
    for (Object arg : args) {
        System.out.println(arg);
     }
    return "a";
}

@Test
public void test28() throws InvocationTargetException, IllegalAccessException {
    Method method = ReflectionUtil.getMethodByName(NormalTest.class, "testa");
        //wrong number of arguments
//      method.invoke(this);
        //argument type mismatch
//      method.invoke(this, 123);
        //argument type mismatch
//      method.invoke(this, new Object[]{123});
        // argument type mismatch
//      method.invoke(this, new Object[]{new int[]{123}});
        //right
        method.invoke(this, new Object[]{new Integer[]{123}});
    }

NormalTest класс имеет метод testa, используйте отражение, чтобы получить этот метод и вызвать его, указанными выше 5 способами, только последний успешен, зачем передавать переменные аргументы с вложенным массивом?

JDK версия 7.

1 Ответ

0 голосов
/ 09 декабря 2018
public String testa(Object... args)

является синтаксическим сахаром для

public String testa(Object[] args)

Так что это метод, ожидающий массив объектов.

Method.invoke() ожидает массив объектов, содержащий все аргументы для передачи вметоды.Таким образом, если метод принимает строку и целое число, вам нужно будет передать объект [], содержащий строку и целое число.Поскольку ваш метод принимает Object [] в качестве аргумента, вы должны передать в Method.invoke () Object [], содержащий Object [].Это то, что вы делаете в последней попытке.Но не то, что вы делаете в каждой другой попытке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...