java reflection illegalargumentexception

java - ¿Por qué obtengo "objeto no es una instancia de declaración de clase" cuando invoco un método utilizando reflexión?



reflection illegalargumentexception (2)

Cuando invoque un método a través de la reflexión, debe pasar el objeto al que está llamando el método como el primer parámetro al Method#invoke .

// equivalent to s1.testParam("", obj) testParamMethod.invoke(s1, "", obj);

public class Shared { public static void main(String arg[]) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException { Shared s1 = new Shared(); Object obj[] = new Object[2]; obj[0] = "object1"; obj[1] = "object2"; s1.testParam(null, obj); Class param[] = new Class[2]; param[0] = String.class; param[1] = Object[].class; //// how to define the second parameter as array Method testParamMethod = s1.getClass().getDeclaredMethod("testParam", param); testParamMethod.invoke("", obj); ///// here getting error } public void testParam(String query,Object ... params){ System.out.println("in the testparam method"); } }

Aquí está el resultado:

in the testparam method Exception in thread "main" java.lang.IllegalArgumentException: object is not an instance of declaring class at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at pkg.Shared.main(Shared.java:20)


testParamMethod.invoke("", obj); ///// here getting error

El primer parámetro para invocar debe ser el objeto para invocarlo:

testParamMethod.invoke(s1, "", obj);