Como invocar um método com uma superclasse
-
06-07-2019 - |
Pergunta
Estou tentando invocar um método que toma uma super classe como um parâmetro com subclasses na instância.
public String methodtobeinvoked(Collection<String> collection);
Agora se invocar via
List<String> list = new ArrayList();
String methodName = "methodtobeinvoked";
...
method = someObject.getMethod(methodName,new Object[]{list});
Isso falhará com uma exceção não desse método
SomeObject.methodtobeinvoked(java.util.ArrayList);
Mesmo que exista um método que possa assumir o parâmetro.
Alguma idéia da melhor maneira de contornar isso?
Solução
Você precisa especificar o parâmetro tipos dentro getMethod()
invocação:
method = someObject.getMethod("methodtobeinvoked", Collection.class);
A matriz de objetos é desnecessária; O Java 1.5 suporta varargs.
Atualizar (com base em comentários)
Então você precisa fazer 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);
}
}
O acima apenas cheques público métodos com um único argumento; atualização conforme necessário.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow