有没有办法在不指定参数的情况下使用反射方法?
我试过了:
method = className.class.getMethod("nameOfTheMethod");
其中nameOfTheMethod
是具有5个参数的函数。
但是它认为nameOfTheMethod
是一个没有参数的函数,并且给了我java.lang.NoSuchMethodException
。
答案 0 :(得分:2)
你可以获得所有方法
由此Class对象表示的类或接口声明。
与
Method[] methods = ClassName.class.getDeclaredMethods();
通过它们迭代并找到你的。如果您的方法过载,这是不安全的,因为您仍然需要检查参数。
答案 1 :(得分:1)
你不能这样做,getMethod
需要参数的数量。
您可以使用getMethods
或getDeclaredMethods
,具体取决于您所寻找的内容,并将其中任何一个与您想要的名称相匹配。
您可以获得多个匹配名称但参数不同的人。
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);
用你的参数分别替换长子。