0

インスタンス内のサブクラスを使用して、スーパー クラスをパラメーターとして受け取るメソッドを呼び出そうとしています。

public String methodtobeinvoked(Collection<String> collection);

経由で呼び出す場合

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

no such method Exception で失敗します

SomeObject.methodtobeinvoked(java.util.ArrayList);

パラメータを取ることができるメソッドは存在しますが。

これを回避する最善の方法について何か考えはありますか?

4

1 に答える 1

4

呼び出しでパラメーターの型を指定する必要があります。getMethod()

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

オブジェクト配列は不要です。Java 1.5 は可変引数をサポートしています。

更新(コメントに基づく)

したがって、次のようなことをする必要があります。

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

上記は、単一の引数を持つpublicメソッドのみをチェックします。必要に応じて更新します。

于 2009-10-26T22:21:33.470 に答える