反射: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.
----------------解决方案--------------------------------------------------------
利用可变参数是必须的,然后利用反射拿到 方法的参数数量及类型,然后加判断
----------------解决方案--------------------------------------------------------
回复 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);
}
}
}
----------------解决方案--------------------------------------------------------
好久没上了,大家好
----------------解决方案--------------------------------------------------------