我有一个接口(interface)Producer<T>和一个实现FooProducer的具体Producer<Foo>。固执地将其束缚为罪恶是丑陋的:

bind(new TypeLiteral<Producer<Foo>>() {}).to(FooProducer.class);

我有很多这样的绑定(bind)。我尝试了以下方法:
static <T> TypeLiteral<Producer<T>> producer() {
    return new TypeLiteral<Producer<T>>(){};
}

通过这种方式进行的调用:
bind(ContainingClass.<Foo>producer()).to(FooProducer.class);

但是,它沿着Producer<T> is not specific enough...给出了错误。

我会以错误的方式处理此问题吗?

最佳答案

代替

bind(new TypeLiteral<Producer<Foo>>() {}).to(FooProducer.class);

尝试像这样的便利方法
static <T> Key<Producer<T>> producerOf(Class<T> type) {
  return (Key<Producer<T>>)Key.get(Types.newParameterizedType(Producer.class,type));
}

然后在你的模块中
bind(producerOf(Foo.class)).to(FooProducer.class);

那未经检查的 Actor 应该是安全的。键是com.google.inject.Key,类型是com.google.inject.util.Types。

祝你好运

关于java - Guice泛型-如何使它不那么丑陋?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3777428/

10-08 22:07