如果一个方法定义为不定长参数:
public void method1(String name, Object... params) {
...
}
该如何调用这个类的 getDeclaredMethod 来获取这个方法?谢谢!PS:终于可以给 200 分了,庆祝一下
public void method1(String name, Object... params) {
...
}
该如何调用这个类的 getDeclaredMethod 来获取这个方法?谢谢!PS:终于可以给 200 分了,庆祝一下
public Method getDeclaredMethod(String name,
Class... parameterTypes)
throws NoSuchMethodException,
SecurityException返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。name 参数是一个 String,它指定所需方法的简称,parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识该方法的形式参数类型。如果在某个类中声明了带有相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;否则将从中任选一个方法。如果名称是 "<init>” 或 “<clinit>",则引发一个 NoSuchMethodException。 参数:
name - 方法名
parameterTypes - 参数数组
返回:
该类与指定名和参数相匹配的方法的 Method 对象
抛出:
NoSuchMethodException - 如果找不到匹配的方法。
NullPointerException - 如果 name 为 null
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
调用 s.checkMemberAccess(this, Member.DECLARED) 拒绝访问已声明方法
调用方的类加载器不同于也不是该类的类加载器的一个祖先,并且对 s.checkPackageAccess() 的调用拒绝访问该类的包
从以下版本开始:
JDK1.1
不对吧?!Class[] cls = new Class[]{String.class, Object.class,...};//这里你想调用几个就写几个,前提是你没有确定的指定参数个数的同名方法getDeclaredMethod("method1",cls);
public void hello(String... names) {}
和
public void hello(String[] names) {}是一样的,所以只要获取
getDeclaredMethod("hello",String[].class);这样就可以了。来,继续放分!
new Test().getDeclaredMethod("method1",clazzes);
getDeclaredMethod("method1", String.class, Object[].class);哈哈,第一次知道Object... params 和 Object[].calss这种写法。