0

我有一个适配器,旨在将变量参数的调用转换为指定的方法目标。示例代码如下所示。

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 中,变量argsArray是相同的。由于组合空间太大,无法迭代 args 中的每个元素以找到匹配的方法run 。


需要一个接受可变参数的 API,说:

     Object execute(Object... args)

然后我为许多指定类型的情况提供了一些优化的实现版本,当 args 中的元素类时。

4

1 回答 1

0

最简单的方法是使用反射迭代所有run方法,并寻找参数类型的精确匹配。

如果您还需要支持近似匹配,其中应用了 Java 强制或一些扩展转换,那么它有点复杂,但仍然可行。

一旦一切正常,您就完成了,除非分析器说您在代码中存在性能问题,在这种情况下,您可能会尝试优化非顺序的搜索算法。

于 2015-10-20T01:28:35.983 回答