Come invocare un metodo con una superclasse
-
06-07-2019 - |
Domanda
Sto cercando di invocare un metodo che accetta una superclasse come parametro con sottoclassi nell'istanza.
public String methodtobeinvoked(Collection<String> collection);
Ora se invoco tramite
List<String> list = new ArrayList();
String methodName = "methodtobeinvoked";
...
method = someObject.getMethod(methodName,new Object[]{list});
Fallirà senza un'eccezione del metodo di questo tipo
SomeObject.methodtobeinvoked(java.util.ArrayList);
Anche se esiste un metodo che può accettare il parametro.
Qualche idea sul modo migliore per aggirare questo?
Soluzione
Devi specificare i parametri tipi in getMethod ()
invocazione:
method = someObject.getMethod("methodtobeinvoked", Collection.class);
L'array di oggetti non è necessario; java 1.5 supporta varargs.
Aggiorna (in base ai commenti)
Quindi devi fare qualcosa del tipo:
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);
}
}
Quanto sopra controlla solo i metodi pubblici con un singolo argomento; aggiornare secondo necessità.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow