Cómo invocar un método con una superclase
-
06-07-2019 - |
Pregunta
Estoy intentando invocar un método que toma una superclase como parámetro con subclases en la instancia.
public String methodtobeinvoked(Collection<String> collection);
Ahora si invocar a través de
List<String> list = new ArrayList();
String methodName = "methodtobeinvoked";
...
method = someObject.getMethod(methodName,new Object[]{list});
Fallará con una excepción de tal método
SomeObject.methodtobeinvoked(java.util.ArrayList);
Aunque existe un método que puede tomar el parámetro.
¿Alguna idea sobre la mejor manera de evitar esto?
Solución
Debe especificar los parámetros tipos en getMethod ()
invocación:
method = someObject.getMethod("methodtobeinvoked", Collection.class);
La matriz de objetos es innecesaria; Java 1.5 admite varargs.
Actualización (basado en comentarios)
Entonces necesita hacer algo como:
Method[] methods = myObject.getClass().getMethods();
for (Method method : methods) {
if (!method.getName().equals("methodtobeinvoked")) continue;
Class[] methodParameters = method.getParameterTypes();
if (methodParameters.length!=1) continue; // ignore methods with wrong number of arguments
if (methodParameters[0].isAssignableFrom(myArgument.class)) {
method.invoke(myObject, myArgument);
}
}
Lo anterior solo verifica los métodos públicos con un solo argumento; actualizar según sea necesario.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow