同じインターフェースのいくつかのインスタンスをさまざまな指定された方法で組み合わせるインターフェースを実装するための最良の方法は何ですか?複数のインターフェースに対してこれを行う必要があります。重要な本番システムでこれが必要なため、ボイラープレートを最小限に抑えながら、優れた効率を実現したいと考えています。
これが問題のスケッチです。
抽象的には、インスタンスを受け取り、さまざまなコンビネータを指定する汎用コンビネータクラスがあります。
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の動的プロキシを使用してそのようなインターフェースを実装できることは知っていますが、リフレクションを介したメソッドアクセスは100倍遅くなります。では、この場合の定型文と反射の代替案は何ですか?