我有个问题。我有一个接口:
public interface MyInterface <AMessageTuple>{
public ConnectableObservable<AMessageTuple> getTokenConnectableObservable();
}我想成为一个单身人士:
public class MyImpl implements MyInterface<ImmutablePair<String, Message>> {
...
//irrelevant members omitted
@Override
public ConnectableObservable<ImmutablePair<String, Message>> getTokenConnectableObservable() {
return tokenObservable;
}
...
}当我试图在扩展Guice的AbstractModule的类中将接口绑定到实现时
public class MyServiceModule extends AbstractModule {
@Override
protected void configure() {
TypeLiteral <MyInterface<ImmutablePair<String, Message>>> t = new TypeLiteral<MyInterface<ImmutablePair<String,Message>>>() {
};
bind(t).annotatedWith(Names.named("firstOne")).to(MyImpl.class).in(Singleton.class);
}
}bind...规则以红色加下划线(作为编译错误),这是我在悬停在上面时看到的消息:
类型为
bind(Key<T>)的方法AbstractModule不适用于参数(TypeLiteral<MyInterface<ImmutablePair<String, Message>>>)
奇怪的是,按下Ctr+Space确实认识到方法绑定(TypeLiteral)存在.所以我有点困惑,希望有人能给我一个提示,让我知道我错过了什么。
上下文:我使用Eclipse作为我的IDE,我使用(显然) Guice (版本4.0)作为DI,并且项目的JDK是oracle-7。我目前在Guice中绑定泛型类的方法是基于这个问题的。
发布于 2019-10-19 18:16:59
确保您使用了import com.google.inject.TypeLiteral;
https://stackoverflow.com/questions/43265766
复制相似问题