有没有办法在不指定参数的情况下使用反射的方法?
我试过这个:
method = className.class.getMethod("nameOfTheMethod");
wherenameOfTheMethod
是一个有 5 个参数的函数。
但它认为这nameOfTheMethod
是一个没有参数的函数,并给了我java.lang.NoSuchMethodException
.
有没有办法在不指定参数的情况下使用反射的方法?
我试过这个:
method = className.class.getMethod("nameOfTheMethod");
wherenameOfTheMethod
是一个有 5 个参数的函数。
但它认为这nameOfTheMethod
是一个没有参数的函数,并给了我java.lang.NoSuchMethodException
.
你可以得到所有的方法
由此 Class 对象表示的类或接口声明。
和
Method[] methods = ClassName.class.getDeclaredMethods();
遍历它们并找到你的。如果您的方法重载,这是不安全的,因为您仍然需要检查参数。
你不能那样做,getMethod
需要参数的数量。
您可以使用getMethods
或getDeclaredMethods
,这取决于您要查找的内容,并将它们中的任何一个与您想要的名称相匹配。
您可以获得超过 1 个与名称匹配但具有不同参数的名称。
getMethods
将要
返回一个包含 Method 对象的数组,该对象反映此 Class 对象表示的类或接口的所有公共成员方法,包括由类或接口声明的那些以及从超类和超接口继承的那些
虽然getDeclaredMethods
会
返回一个 Method 对象数组,反映由此 Class 对象表示的类或接口声明的所有方法。这包括公共、受保护、默认(包)访问和私有方法,但不包括继承的方法。
您可以通过使用getDeclaredMethods()
和迭代返回的数组来实现这一点。
Method[] methods = className.class.getDeclaredMethods();
for (Method m : methods) {
if (m.getName().equals("nameOfTheMethod")) {
// found
break;
}
}
这种方式有一个缺点,它只对未重载的方法可靠。但是,您可以轻松地更进一步,因此找到具有指定名称的所有方法的数组或集合。
您需要指定参数类型
尝试
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);
将 long 分别替换为您的参数的任何类型。