来自 JavaDocBinder:
Guice 目前无法绑定或注入
泛型类型,例如Set<E>
全部
类型参数必须是完整的
指定的。
您可以为以下对象创建绑定Foo
when K
and V
绑定。
如果您需要进行绑定Foo
对于不止一种类型的密钥,您可以创建一种方法来更轻松地进行这些绑定。一种方法是在模块中创建如下方法:
<K, V extends Bar<K>> AnnotatedBindingBuilder<Foo<V, K>> bind(Class<K> keyType,
Class<V> barType) {
ParameterizedType bType = Types.newParameterizedType(Bar.class, keyType);
ParameterizedType fType = Types.newParameterizedType(Foo.class, barType,
keyType);
@SuppressWarnings("unchecked")
TypeLiteral<Foo<V, K>> typeLiteral =
(TypeLiteral<Foo<V, K>>) TypeLiteral.get(fType);
return bind(typeLiteral);
}
那么如果你有这些课程:
class StringValue implements Bar<String> {
...
}
class StringValueProcessor implements Foo<StringValue, String> {
...
}
您可以像这样创建绑定:
bind(String.class, StringValue.class).to(StringValueProcessor.class);
...这样 Guice 就可以注入到这样的类中:
static class Target {
private final Foo<StringValue, String> foo;
@Inject
public Target(Foo<StringValue, String> foo) {
this.foo = foo;
}
}