2
时,此工作:吉斯,注射TypeLiteral <T>使用@AssistedInject
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();
}
}
吉斯自动注入的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稍有不同?
啊哈..所以这是一个设置问题,如果你直接注入实例这也适用。感谢您花时间测试它并回答。原来,这是因为我有一个涉及GIN的jar,guice-assistedinject-snapshot.jar而不是guice-assistedinject-3.0.jar(注意,常规的辅助注入似乎可以在这个jar中工作,而不是在泛型中) – aidanok 2012-04-19 19:31:21