これが私がやりたいことです:
私は次のようなインターフェースサービスを持っています:
public interface Service<A extends Object, R extends Object> {
R run(A a);
}
ここで、一般的なものを維持しながら、このような2つのサービスをリンクしたいと思います。
public class Link<A, R> implements Service<A, R> {
private Service<A, X> s1; // fail
private Service<X, R> s2; // fail
public <X> Link(Service<A, X> s1, Service<X, R> s2) {
this.s1 = s1;
this.s2 = s2;
}
@Override
public R run(A a) {
return s2.run(s1.run(a));
}
}
私が対処したい問題は、ジェネリック型XをクラスLinkに割り当てることですが、クラス宣言ではなく、コンストラクターを介して推測されるようにしたいのです。
それはどのように達成可能ですか?
編集:
私がこれを解決した方法は、リンクプロセスを実行するユーティリティ静的メソッドによるものです。
public static <A, I, R> Service<A, R> link(final Service<A, I> s1, final Service<I, R> s2) {
return new Service<A, R>() {
@Override
public R run(A a) throws Exception {
I intermediate = s1.run(a);
return s2.run(intermediate);
}
};
}