Java / Taking方法没有指定其参数

时间:2013-08-22 13:52:34

标签: java reflection

有没有办法在不指定参数的情况下使用反射方法?

我试过了:

method = className.class.getMethod("nameOfTheMethod");

其中nameOfTheMethod是具有5个参数的函数。

但是它认为nameOfTheMethod是一个没有参数的函数,并且给了我java.lang.NoSuchMethodException

4 个答案:

答案 0 :(得分:2)

你可以获得所有方法

  

由此Class对象表示的类或接口声明。

Method[] methods = ClassName.class.getDeclaredMethods();

通过它们迭代并找到你的。如果您的方法过载,这是不安全的,因为您仍然需要检查参数。

答案 1 :(得分:1)

你不能这样做,getMethod需要参数的数量。

您可以使用getMethodsgetDeclaredMethods,具体取决于您所寻找的内容,并将其中任何一个与您想要的名称相匹配。

您可以获得多个匹配名称但参数不同的人。

getMethods

  

返回一个包含Method对象的数组,这些对象反映此Class对象所表示的类或接口的所有公共成员方法,包括由类或接口声明的那些以及从超类和超接口继承的那些

getDeclaredMethods

  

返回一个Method对象数组,这些对象反映由此Class对象表示的类或接口声明的所有方法。这包括公共,受保护,默认(包)访问和私有方法,但不包括继承的方法。

答案 2 :(得分:1)

您可以使用getDeclaredMethods()并迭代返回的数组来实现此目的。

    Method[] methods = className.class.getDeclaredMethods();
    for (Method m : methods) {
        if (m.getName().equals("nameOfTheMethod")) {
            // found
            break;
        }
    }

这种方式有缺点,它只适用于没有重载的方法。但是,您可以轻松地进行此操作,因此可以找到具有指定名称的所有方法的数组或集合。

答案 3 :(得分:0)

您需要指定参数类型

尝试

Class[] cArg = new Class[5];
cArg[0] = Long.class;
cArg[1] = Long.class;
cArg[2] = Long.class;
cArg[3] = Long.class;
cArg[4] = Long.class;
Method lMethod = c.getMethod("nameOfMethod", cArg);

用你的参数分别替换长子。