实现以各种指定方式组合同一接口的某些实例的接口的最佳方法是什么?我需要为多个接口执行此操作,并且我希望最大限度地减少样板代码并仍然实现良好的效率,因为我需要它用于关键生产系统。
这是问题的草图。
抽象地说,我有一个通用组合器类,它接受实例并指定各种组合器:
class Combiner<I> {
I[] instances;
<T> T combineSomeWay(InstanceMethod<I,T> method) {
// ... method.call(instances[i]) ... combined in some way ...
}
// more combinators
}
现在,假设我想在许多其他接口中实现以下接口:
Interface Foo {
String bar(int baz);
}
我想结束这样的代码:
class FooCombiner implements Foo {
Combiner<Foo> combiner;
@Override
public String bar(final int baz) {
return combiner.combineSomeWay(new InstanceMethod<Foo, String> {
@Override public call(Foo instance) { return instance.bar(baz); }
});
}
}
现在,如果接口有很多方法,这很快就会变得冗长而曲折。我知道我可以使用 Java 反射 API 中的动态代理来实现这样的接口,但是通过反射访问方法要慢一百倍。那么在这种情况下,样板和反射的替代方案是什么?