我想创建一个类,它只是将函数调用转发给它包含的列表中的每个项目。可调用函数由接口声明 例如(伪代码):
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
答案 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();
}
}
}
}
当然你必须添加构造函数,辅助方法来添加元素等。
希望这个帮助作为一个起点