这有效:
public static class SomeGenericType<T> {
private TypeLiteral<T> type;
@Inject
public SomeGenericType(TypeLiteral<T> type) {
this.type = type;
}
public Class<? super T> getType() {
return type.getRawType();
}
}
当我这样做时,Guice 会自动注入表示 String 的 TypeLiteral:
@Inject SomeGenericType<String> foo;
但是当使用辅助注入尝试同样的事情时:
public static interface FooFactory<T> {
Foo<T> create(String name);
}
public static class Foo<T> {
@AssistedInject
public Foo(TypeLiteral<T> type, @Assisted String name) {
....
我的模块看起来像这样:
public static class TestMod extends AbstractModule {
@Override
protected void configure() {
install(new FactoryModuleBuilder().build(new TypeLiteral<FooFactory<String>>(){}));
}
}
安装模块时出现异常:
TypeLiteral<T> cannot be used as a Key, it is not fully specified.
这当然是我试图注入的 TypeLiteral 问题,因为当我删除它时,通用工厂确实可以正常工作。
所以,我现在可能只是建立自己的工厂,但我很好奇这是否可行?使用 FactoryModuleBuilder 是否略有不同?