我有一个接口(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/