Reputation: 1731
I'm trying to invoke a method with variable arguments using java reflection. Here's the class which hosts the method:
public class TestClass {
public void setParam(N ... n){
System.out.println("Calling set param...");
}
Here's the invoking code :
try {
Class<?> c = Class.forName("com.test.reflection.TestClass");
Method method = c.getMethod ("setParam", com.test.reflection.N[].class);
method.invoke(c, new com.test.reflection.N[]{});
I'm getting IllegalArgumentException in the form of "wrong number of arguments" at the last line where I'm calling invoke. Not sure what I'm doing wrong.
Any pointers will be appreciated.
Upvotes: 7
Views: 19037
Reputation: 692121
There is no TestClass
instance in your code snippet on which the methd is invoked. You need an instance of the TestClass
, and not just the TestClass
itself. Call newInstance()
on c
, and use the result of this call as the first argument of method.invoke()
.
Moreover, to make sure your array is considered as one argument, and not a varargs, you need to cast it to Object:
m.invoke(testClassInstance, (Object) new com.test.reflection.N[]{});
Upvotes: 3
Reputation: 4073
public class Test {
public void setParam(N... n) {
System.out.println("Calling set param...");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
Test t=new Test();
Class<?> c = Class.forName("test.Test");
Method method = c.getMethod ("setParam", N[].class);
method.invoke(t, (Object) new N[]{});
}
}
Works for me.
Upvotes: 15