这是我想要做的:
我有一个接口服务,如下所示:
public interface Service<A extends Object, R extends Object> {
R run(A a);
}现在,我想链接两个这样的服务,同时保持它的通用性:
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));
}
}我想解决的问题是给Link类分配一个泛型类型X,但我希望通过它的构造函数而不是通过类声明来推断它。
它是如何实现的?
编辑:
我解决这个问题的方法是一个实用的静态方法,它执行链接过程:
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);
}
};
}发布于 2012-12-15 01:39:36
这将会起作用:
public class Link<A, R, X> implements Service<A, R> {
private Service<A, X> s1;
private Service<X, R> s2;
public 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));
}
}https://stackoverflow.com/questions/13883372
复制相似问题