A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾辉 黑马帝   /  2012-2-3 16:01  /  6134 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

比如
public void add(int... nums){
   
}
这样的参数用反射如何赋值呢?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

2 个回复

倒序浏览
可变参数的方法反射可将可变参数封装成一个数组,再按照一个参数时的反射来调即可
public void add(int... nums){}的反射即可写成
Method methodAdd =类.class.getMethod("add",int[].class) ;
methodAdd.invoke(对象,new int[]{1,2,3,4,5});
下面是我测试通过的例子。楼主可试试
package gz.com;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ReflectDemo1 {

        public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException
        {
                Demo1 demo1 = new Demo1();
                demo1.add(1,2,3,4,5);
                Method methodAdd = Demo1.class.getMethod("add", int[].class);
                methodAdd.invoke(demo1, new int[]{1,2,3,4});
        }

}
class Demo1
{
        public void add(int... nums)
        {
                int sum = 0;
                for(int i=0;i<nums.length;i++)
                {
                        sum =sum+nums[i];
                }
                System.out.println(sum);
        }
       
}

评分

参与人数 1技术分 +2 收起 理由
admin + 2 赞一个!

查看全部评分

回复 使用道具 举报
用反射调用可变参数的函数就是传入一个数组作参数。
在网上找到的一个例子:
public class Test{     
        public static void main(String args[])throws Exception{
                Arg arg = new Arg();
                for(Method method : arg.getClass().getMethods())
                {
                         if(method.getName().equals("many"))//找到我们要用的方法
              {
                                  Object[] param = new Object[1];
                                  param[0] = new String[]{"hello"};
                                  System.out.println(method.invoke(arg, param));
                        }
               }
       }
}
class Arg extends Thread{
    public String many(Object... args)
    {
        if(args!=null && args.length>0)
            return args[0].toString();
        return "test";
    }
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马