我有一个适配器,旨在将变量参数的调用转换为指定的方法目标。示例代码如下所示。
class Adapter {
public Object execute(Object... args){
run(args);
//run2(args[0], args[1]);
//run3(args[0], args[1]);
}
private int run(int c, int d){
return c+d;
}
private int run(int a, float b){
return 0;
}
private String run(Integer a, String b){
return "ss";
}
private Object run(Object c, float m, int q){
return new Object();
}
..........
}
方法execute () 接受一个可变参数。根据args中的元素,Adapter 会选择一个具有一致方法类型的runX函数来执行。例如,如果 args 中的前两个元素都是 int,则将选择 run1。匹配规则为:
args:{1,2} => run(int, int)
args:{new Integer(3), "asdas"} => run(Integer, String)
args:{new Object(), 4.0, 5} => run(Object, float, int)
.......
有没有在方法执行中进行这种调用转换的好方法?在 Java 中,变量args和Array是相同的。由于组合空间太大,无法迭代 args 中的每个元素以找到匹配的方法run 。
需要一个接受可变参数的 API,说:
Object execute(Object... args)
然后我为许多指定类型的情况提供了一些优化的实现版本,当 args 中的元素类时。