Чтобы немного рассказать о том, что говорят Орион и Бяобяоци. , .
Что вас, вероятно, смущает, так это то, что Method.invoke(Object, Object...)
обычно может просто принимать аргументы, так сказать; когда компилятор видит что-то вроде someMethod.invoke(someObject, arg1, arg2)
, он неявно создает массив new Object[]{arg1, arg2}
и затем передает этот массив в Method.invoke
. Method.invoke
затем передает элементы этого массива в качестве аргументов вызываемому методу. Пока все хорошо.
Но когда компилятор видит что-то вроде someMethod.invoke(someObject, someArray)
, он предполагает, что вы уже упаковали аргументы в массив; поэтому он не будет переупаковывать их снова. Тогда Method.invoke
будет пытаться передать элементы из someArray
в качестве аргументов вызываемому методу, вместо передачи someArray
самой в качестве аргумента.
(Это всегда, как работает нотация ...
; она принимает либо массив, содержащий элементы соответствующего типа, или ноль или более аргументов соответствующего типа.)
Итак, как сказали Ори и Бяобяоци, вам нужно перевернуть ваш parameters
в дополнительный массив new Object[] {parameters}
, чтобы сам по себе parameters
передавался в ваш метод.
Имеет ли это смысл?