2
を使用する場合は、この作品:Guiceの、インジェクト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();
}
}
Guiceには、自動的に私が行うときTypeLiteralがStringを表す注入:
@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を少し違った方法で使用していますか?
なるほど...そう、それはセットアップの問題だったあなたは、直接インスタンスを注入する場合にも動作します。それを試して答えてくれてありがとう。それは、guice-assistedinject-3.0.jarの代わりにGINに関連するjarファイル(guice-assistedinject-snapshot.jar)があるからです(サイドノート、定期的な補助注入はジェネリックでは使えないようです) – aidanok