método sobrecargado acceso a través de API de reflexión

user683224:

¿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.

Holger:

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 getDeclaredMethodno se da pesquisa superclases. getMethodhace superclases buscar, pero sólo considera publicmé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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=363856&siteId=1
Recomendado
Clasificación