如何通过java 反射 调用一个 含有 可变参数的 方法呢 ??

比如说publicvoidtest(String...str){....}.....publicstaticvoidmain(String[]args){//我该如何实现... 比如说 public void test(String ... str){ ....}.....public static void main(String[] args){ //我该 如何实现呢 } 展开
 我来答
小傻

2015-11-16 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31134
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部

java反射调用可变参数的方法的方式是传入objects参数,如下代码:

public class Reflect {
 
    public static void main(String[] args) throws Exception {
        Class<?> clazz = Single.class;
        Single single = (Single) clazz.newInstance();
        List<String> list = new ArrayList<String>(){
            private static final long serialVersionUID = 1L;
            {
                add("fuck");
                add("ni");
                add("mei");
            }
        };
         
        //获取method两种方式, 在method中 数组的的空间大小是可以随便写的不一定使用0
        /* 1 */
        Method method = clazz.getDeclaredMethod("method", Array.newInstance(Object.class, 0).getClass());
        /* 2 */
        method = clazz.getDeclaredMethod("method", (new Object[0]).getClass());
 
 
         
        //初始化参数
        /* 1 */
        Object objs = Array.newInstance(Object.class, 2);
        Array.set(objs, 0, list);
        Array.set(objs, 1, "23");
        method.invoke(single, objs);
         
        /* 2 */
        Object[] objects = {1, "fuck", list};
        method.invoke(single, new Object[]{ objects });
    }
}
 
class Single {
    public void method(Object... objs) {
        System.out.println(Arrays.deepToString(objs));
    }
}
 
结果:
[[fuck, ni, mei], 23]
[1, fuck, [fuck, ni, mei]]
峰华前端工程师
2011-10-13 · 超过25用户采纳过TA的回答
知道答主
回答量:150
采纳率:0%
帮助的人:69.6万
展开全部
package com.zxq.test;

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

public class Test {

public void test (String...args) {
System.out.println(args.length);//输出可变参数的长度
}

/**
* @param args
*/
public static void main(String[] args) {
try {
Object o = Class.forName("com.zxq.test.Test").newInstance();//获取Test类的实例
Method test = o.getClass().getMethod("test", String[].class);//获取test方法,String...args就是一个数组类型,所以用String[].class
String[] methodArgs = new String[3];//定义test的实参
Object[] arguments = {methodArgs};//要传递的参数。因为test方法只需要一个数组参数,所以只能传一个methodArgs,但是methodArgs可以有多个元素,因为它是可变参数
test.invoke(o, arguments);//调用
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}

}

}

//结果:3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幽静孤雨下
2015-09-24 · TA获得超过187个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:115万
展开全部
Class class = obj.getClass();
Method mtd= class .getDeclaredMethod("方法名称");
mtd.invok(obj,你需要设定的参数);
说明:如果调用的方法中使用了可变参数,你在实际执行该方法时候指定相应的参数即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式