Guice / Eclipse TypeLiteral问题

时间:2017-04-06 21:07:10

标签: java eclipse generics guice

这是我的问题。我有一个界面:

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... ligne以红色加下划线(编译错误),这是我在悬停时看到的消息:

  

bind(Key<T>)类型中的方法AbstractModule不适用   对于论点   (TypeLiteral<MyInterface<ImmutablePair<String, Message>>>)

奇怪的是,按下Ctr + Space确实认识到方法bind(TypeLiteral)存在...所以我有点困惑,并希望有人可以给我一个关于我缺少什么的提示。

上下文:我使用Eclipse Neon作为我的IDE,我使用(显然)Guice(版本4.0)用于DI,项目的JDK是oracle-7。我目前在Guice中绑定泛型类的方法基于this question

1 个答案:

答案 0 :(得分:0)

请确保您使用import com.google.inject.TypeLiteral;

相关问题