¿Cómo distinguir un método sobrecargado clase utilizando Reflexión por ejemplo:
method()
y method(int arg)
void invoke(Object object, String methodName, int id) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
object.getClass().getDeclaredMethod(methodName).invoke(object, int.class);
}
Y llamar a esta función:
getV(new Object(), "method", 33);
Y se devuelve el error java.lang.IllegalArgumentException: wrong number of arguments
, eso significa que el método sin argumentos choosed por defecto. Si invoco el método sin el int parámetro que va a funcionar. Me pregunto cómo distinguir la década de método sobrecargado? He leído los documentos de Class.getDeclaredMethod
https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html También hay un viejo mensaje el SO pero ambas fuentes no están respondiendo a la misma pregunta ¿Cómo encontrar un método sobrecargado en Java? . Por supuesto Class.Object dosis no tienen método con el método que acabo de utilizar el nombre que para el ejemplo.
Tiene que especificar los tipos de parámetros para el método de búsqueda, no el método de invocación:
void invoke(Object object, String methodName, int id) throws ReflectiveOperationException {
object.getClass().getDeclaredMethod(methodName, int.class).invoke(object, id);
}
Pero hay que tener en cuenta que getClass()
los rendimientos de la clase real, lo que podría ser una subclase de la clase prevista, mientras que getDeclaredMethod
no se da pesquisa superclases. getMethod
hace superclases buscar, pero sólo considera public
métodos.
Para tener en cuenta los métodos no públicos dentro de la jerarquía de tipos, que tendría que recorrer las superclases sí mismo cuando no se ha encontrado el método.