Как вызвать метод с суперклассом - PullRequest
0 голосов
/ 27 октября 2009

Я пытаюсь вызвать метод, который принимает суперкласс в качестве параметра с подклассами в экземпляре.

public String methodtobeinvoked(Collection<String> collection);

Теперь, если вызвать через

List<String> list = new ArrayList();
String methodName = "methodtobeinvoked";
...
method = someObject.getMethod(methodName,new Object[]{list});

Не получится без такого метода. Исключение

SomeObject.methodtobeinvoked(java.util.ArrayList);

Даже если метод, который может принять параметр, существует.

Есть мысли о том, как лучше обойти это?

1 Ответ

4 голосов
/ 27 октября 2009

Необходимо указать параметр типы в getMethod() вызов:

method = someObject.getMethod("methodtobeinvoked", Collection.class);

Массив объектов не нужен; Java 1.5 поддерживает Varargs.

Обновление (на основе комментариев)

Так что вам нужно сделать что-то вроде:

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);
  }
}

Выше проверяются только публичные методы с одним аргументом; обновите по мере необходимости.

...