当前位置: 代码迷 >> Java相关 >> 反射:Method调用参数可变参数的问题
  详细解决方案

反射:Method调用参数可变参数的问题

热度:653   发布时间:2013-08-28 15:51:36.0
反射: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  

----------------解决方案--------------------------------------------------------
利用可变参数是必须的,然后利用反射拿到 方法的参数数量及类型,然后加判断
----------------解决方案--------------------------------------------------------
回复 2楼 ren829
Method method = classType.getMethod("hello",java.lang.Long.class,java.lang.String.class);
method.invoke(invokeObject, 5l, "abc");
其中标记红色的部分,有可能有两个参数、或者3个参数。
因为参数的个数是程序动态生成的,如何写这部分的“动态参数”代码呢?望赐教!(不要用数组的方式)

谢谢!

----------------解决方案--------------------------------------------------------
也许这个能帮助你
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);
        }
    }
}
----------------解决方案--------------------------------------------------------
好久没上了,大家好
----------------解决方案--------------------------------------------------------
  相关解决方案