转发函数调用所有列表项

时间:2016-12-29 07:39:24

标签: java delegates

我想创建一个类,它只是将函数调用转发给它包含的列表中的每个项目。可调用函数由接口声明 例如(伪代码):

ListObjectForwarder<InterfaceFoo> interfaceFooForwarder;
interfaceFooForwarder.foo1(3,4);

应该产生以下代码:

foreach object in list
    object.foo1(3,4);

和电话

interfaceFooForwarder.foo2("hello");

应该导致

foreach object in list
    object.foo2("hello");

正如您所看到的:调用应该如何转换的模式始终是具有相同调用和参数的foreach循环。可转发呼叫受给定接口(此处为InterfaceFoo - 或eg.InterfaceBar)

的限制

一个重要的细节是,函数调用者不应该能够改变一个对象,无论是直接实现接口还是一个组/对象列表,如本示例所示。

我怎么能在Java中做类似的事情? 我想我需要代表(?),但我无法弄清楚如何在这里正确应用它们。

  

编辑:

     

我不想分别实现foo1和foo2。目标是告诉机器一次&#34;无论函数调用是什么,都要对列表中的所有元素进行操作&#34;

     

另外,我假设每个函数都返回一个void

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题:

class yourList<T>{

    List<T> list = new LinkedList<>();

    void generic(String methodName, Object...args){
        for (Object obj: list) {
            try {

                Class<?>[] classes = new Class<?>[args.length];
                for (int i = 0; i < args.length; i++) {
                    classes[i] = args[i].getClass();
                }
                Method mtd = obj.getClass().getMethod(methodName, classes);
                mtd.invoke(obj, args);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

当然你必须添加构造函数,辅助方法来添加元素等。

希望这个帮助作为一个起点