I am using reflection to call a method on a class that is dynamically constructed at runtime:
public String createJDBCProvider(Object[] args)
Here's how:
Method m = adminTask.getClass().getMethod("createJDBCProvider", Object[].class);
id = (String) m.invoke(adminTask, new Object[]{ "a", "b", "c" });
IDEA warns me that I'm guilty of redundant array creation for calling varargs method
.
The method I'm calling actually takes an Object[]
, not Object ...
but they're probably equivalent and interchangeable I think, so I forge ahead.
At runtime I get:
java.lang.IllegalArgumentException: wrong number of arguments
So it seems that, perhaps, my Object[]
is being passed as a sequence of Object
s. Is this what is happening? If so, how can I coerce it to not do so?
The way you are calling the method, the reflection thinks that you are passing three individual parameters, rather than a single array parameter. Try this:
id = (String) m.invoke(adminTask, new Object[]{ new Object[] {"a", "b", "c"} });
Try this:
Method m = adminTask.getClass().getMethod("createJDBCProvider", Object[].class);
id = (String) m.invoke(adminTask, new String[]{ "a", "b", "c" });
The signature of the method invoke is public Object invoke(Object obj, *Object... args*)
and Idea has an inspection that triggers when passing an array when a vararg of the same type is expected instead.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With