1

私のコードは次のようなものです:

Class<?> targetClass = Class.forName(class_name);
mthd = targetClass.getDeclaredMethod(function_name, new Class[]{Object.class});
mthd.invoke(new Object());  //fails

メソッドを呼び出そうとするIllegalArgumentExceptionとスローされるのはなぜですか?

java.lang.IllegalArgumentException
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
...

私は何が欠けていますか?

更新: 呼び出された関数は:

public static String categoryCount(Object val){
        System.out.println(val.toString());
        return null;
    }
4

2 に答える 2

3

mthd.invokeあなたの場合、2つの引数が必要です。1つ目は呼び出されたメソッドを実行するオブジェクトで、2つ目はの引数ですcategoryCount(val)

(あなたが持っているような)静的メソッドの場合は、以下を使用します。

mthd.invoke(null, new Object());

非静的メソッドの場合は、次を使用します。

mthd.invoke(myObj, new Object());
于 2013-02-27T10:33:08.197 に答える
2
Class<?> clazz = Class.forName(class_name);
Method method = clazz.getMethod("categoryCount", Object.class);
Object o = method.invoke(null, new Object());

正常に動作します

于 2013-02-27T10:35:18.007 に答える