Вызов метода через отражение, когда аргумент имеет тип Object [] - PullRequest
6 голосов
/ 07 марта 2012

Я использую отражение для вызова метода класса, который динамически создается во время выполнения :

public String createJDBCProvider(Object[] args)

Вот как:

Method m = adminTask.getClass().getMethod("createJDBCProvider", Object[].class);
id = (String) m.invoke(adminTask, new Object[]{ "a", "b", "c" });

IDEA предупреждаетмне, что я виновен в redundant array creation for calling varargs method.

Метод, который я вызываю, на самом деле принимает Object[], а не Object ..., но они, вероятно, эквивалентны и взаимозаменяемы, я думаю, поэтому я продолжаю.

Во время выполнения я получаю:

java.lang.IllegalArgumentException: wrong number of arguments

Так что, возможно, мой Object[] передается как последовательность Object с.Это то, что происходит?Если да, то как я могу заставить его не делать этого?

Ответы [ 2 ]

6 голосов
/ 07 марта 2012

При вызове метода рефлексия думает, что вы передаете три отдельных параметра, а не один параметр массива.Попробуйте это:

id = (String) m.invoke(adminTask, new Object[]{ new Object[] {"a", "b", "c"} });
1 голос
/ 10 августа 2012

Попробуйте это:

Method m = adminTask.getClass().getMethod("createJDBCProvider", Object[].class);
id = (String) m.invoke(adminTask, new String[]{ "a", "b", "c" });

Сигнатура вызова метода - public Object invoke(Object obj, *Object... args*), и у Idea есть проверка, которая срабатывает при передаче массива, когда вместо этого ожидается vararg того же типа.

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