如果一个方法定义为不定长参数:
public void method1(String name, Object... params) {
    ...
}
该如何调用这个类的 getDeclaredMethod 来获取这个方法?谢谢!PS:终于可以给 200 分了,庆祝一下

解决方案 »

  1.   

    Object[] args=new Object[]{name,params}getDeclaredMethod("method1",args);
      

  2.   

    java的动态参数是用数组封装的,所以应该把不定长参数当成个数组就行了
      

  3.   

    getDeclaredMethod
    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 
      

  4.   

     
    不对吧?!Class[] cls = new Class[]{String.class, Object.class,...};//这里你想调用几个就写几个,前提是你没有确定的指定参数个数的同名方法getDeclaredMethod("method1",cls);
      

  5.   

    我终于弄明白了:
    public void hello(String... names) {}

    public void hello(String[] names) {}是一样的,所以只要获取
    getDeclaredMethod("hello",String[].class);这样就可以了。来,继续放分!
      

  6.   

    Class[] clazzs = {String.classs,Object[].class};
    new Test().getDeclaredMethod("method1",clazzes);
      

  7.   

    貌似变长的参数可以为null,数组的不可以把。
      

  8.   

    查了半天资料,找到的。
    getDeclaredMethod("method1", String.class, Object[].class);哈哈,第一次知道Object... params 和 Object[].calss这种写法。