我正在为我们的项目尝试 Google GIN,我遇到了一个案例,我有一个通用接口和该接口的通用实现:
public interface IFace<T> {
void setEntry(T t);
}
public class Face<T> implements IFace<T> {
public void setEntry(T t) {
}
}
现在我有一个需要在构造函数中注入 IFace 的接口用户:
public class IFaceUser {
private IFace<String> face;
@Inject
public IFaceUser(IFace<String> face) {
this.face = face;
}
}
如果我尝试将接口绑定到实现bind(IFace.class).to(Face.class);
,则注入失败
Deferred binding result type 'IFace' should not be abstract
所以 GIN 没有找到绑定IFace<String>
并回退到IFace
使用绑定和尝试GWT.create(IFace.class)
。
我也尝试过bind(new TypeLiteral<IFace>(){}).to(new TypeLiteral<Face>(){});
,bind(new TypeLiteral<IFace<?>>(){}).to(new TypeLiteral<Face<?>>(){});
但没有成功。
我知道我可以绑定IFace<String>
到Face<String>
,但这可能会导致一个巨大的模块,其中包含大量重复代码。也可以使用@ImplementedBy(Face.class)
,但这不是一个选项。
有没有bind(...).to(...)
我需要使用的魔法组合?这甚至可以用 GIN 吗?