Я вызываю некоторый метод экземпляра класса, используя способ method.invoke(instance, args...)
, но для каждого метода внутри instance
, как справедливо указывает invoke
Javadoc, каждый аргумент должен быть указан вручную.
Думая о Spring ... как он мог бы оценить параметры в методе контроллера, скрытого во время HTTP-вызовов? (но, конечно, это происходит совсем по-другому, я думаю ...)
Интересно, есть ли в Java какой-либо способ динамически передавать параметры в отражении (или даже не отражении), не указывая каждый из них по отдельности.
EDIT
Объявление класса экземпляра выглядит примерно так:
public class Something {
public void doSth(String par1, String par2, Integer par3) {
//....
}
public void doSthElse(String par1, Boolean par2) {
//....
}
public void doSthElseMore(Integer par1) {
//....
}
}
Как я вызываю каждый метод:
...
for (Method method : instance.getDeclaredMethods()) {
Object[] array = //BL: build array of values to pass to the invoke method.
//1. doSth may be new Object[] {"abc", "def", 123}
//2. doSthElse iteration may be new Object[] {"abc", false}
//3. doSthElseMore iteration may be new Object[] {123}
return method.invoke(instance, array);
}
...
Как показано выше, каждый метод внутри Something
класса (instance
) имеет разное количество параметров.
На каждой итерации array
имеет разное количество значений для передачи в invoke
.