| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1618 人关注过本帖
标题:反射:Method调用参数可变参数的问题
只看楼主 加入收藏
ninggang
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:637
专家分:0
注 册:2006-11-1
结帖率:40%
收藏
已结贴  问题点数:20 回复次数:4 
反射:Method调用参数可变参数的问题
有个关于Method调用可变参数的问题

@Service("helloService")
public class Hello {
     //需要被反射调用的方法
    public void hello(java.lang.Long orderId, java.lang.String status) {
        System.out
                .println(DateUtil.getCurrentDate("yyyy-MM-dd HH:mm:ss") + ",orderId:" + orderId + ",status:" + status);
    }
}
反射调用代码
Method method = classType.getMethod("hello",java.lang.Long.class,java.lang.String.class);
method.invoke(invokeObject, 5l, "abc")
但是由于我hello中的方法中的参数的长度是可变的。

可以考虑采用数组的方式
Method method = classType.getMethod("hello",new Class[]{....});
method.invoke(invokeObject, new Object[]{....});

但是运用数组的方式,我hello中方法中的参数也要调整为Object[].
可否有另外的方法,我参数不用数组,但是程序也不用写死,在getMethod方法的第二个可变参数后动态追加Class,调用的时候,动态追加Object.
搜索更多相关主题的帖子: public method status hello 
2013-08-28 15:51
ren829
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:15
帖 子:255
专家分:1174
注 册:2006-3-11
收藏
得分:7 
利用可变参数是必须的,然后利用反射拿到 方法的参数数量及类型,然后加判断
2013-08-28 18:19
ninggang
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:637
专家分:0
注 册:2006-11-1
收藏
得分:0 
回复 2楼 ren829
Method method = classType.getMethod("hello",java.lang.Long.class,java.lang.String.class);
method.invoke(invokeObject, 5l, "abc");
其中标记红色的部分,有可能有两个参数、或者3个参数。
因为参数的个数是程序动态生成的,如何写这部分的“动态参数”代码呢?望赐教!(不要用数组的方式)

谢谢!

大家一起努力,共同打造未来!!
2013-08-28 19:52
hsjjgm
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:106
专家分:189
注 册:2013-4-27
收藏
得分:7 
也许这个能帮助你
public class Hello
{
    public <T, S extends Iterable<? extends T> hello(S seq, Method method, Object...args)
    {
        for(T t : S seq)
        {
            t.invoke(t, args);
        }
    }
}
2013-08-31 01:24
Kingbox_tang
Rank: 7Rank: 7Rank: 7
来 自:天津师范大学
等 级:黑侠
威 望:3
帖 子:146
专家分:677
注 册:2012-11-27
收藏
得分:7 
好久没上了,大家好

旨在提高编程水平,学有所用,学有所成,学有所为。
2013-08-31 19:31
快速回复:反射:Method调用参数可变参数的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018884 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved