Given:
class A
{
public void m(List l) { ... }
}
Let’s say I want to invoke method m with reflection, passing an ArrayList as the parameter to m:
List myList = new ArrayList();
A a = new A();
Method method = A.class.getMethod("m", new Class[] { myList.getClass() });
method.invoke(a, Object[] { myList });
The getMethod on line 3 will throw NoSuchMethodException because the runtime type of myList is ArrayList, not List.
Is there a good generic way around this that doesn’t require knowledge of class A’s parameter types?
If you know the type is
List, then useList.classas argument.If you don’t know the type in advance, imagine you have:
Which method should the reflection invoke, if there is any automatic way?
If you want, you can use
Class.getInterfaces()orClass.getSuperclass()but this is case-specific.What you can do here is: