Guice 3.0を使用して、特定のチェック済み例外をスローできるプロバイダーを挿入しようとしています。だから私はThrowingProviders拡張機能を使用しています。
プロバイダーのインターフェースを作成しました:
public interface IMyProvider<T> extends CheckedProvider<T>
{
@Override
T get() throws MyException;
}
そしてその実装:
public class MyProvider implements IMyProvider<List<SomeType>>
{
@Override
public List<SomeType> get() throws MyException
{
//...
}
}
プロバイダーを注入するオブジェクトに@Injectアノテーションを使用します。
@Inject
public SomeConstructor(IMyProvider<List<SomeType>> myProvider)
{
//...
}
今、私の問題は:このプロバイダーをバインドする方法ですか?
ジェネリックが使用されているので、私は使用について考えていますTypeLiteral
:
bind(MyProvider.class);
ThrowingProviderBinder.create(binder())
.bind(IMyProvider.class, new TypeLiteral<List<SomeType>>(){})
.to(MyProvider.class);
しかしTypeLiteral
、このbind()メソッドの有効な引数ではないようです。
私は何かが足りないのですか?
アップデート :
回避策を見つけました。拡張するクラスを作成するArrayList<SomeType>
ことで、プロバイダーをバインドできます。
public class SomeTypeList extends ArrayList<SomeType>
と
bind(MyProvider.class);
ThrowingProviderBinder.create(binder())
.bind(IMyProvider.class, SomeTypeList.class)
.to(MyProvider.class);
SomeTypeList
しかし、そのクラスが必要ない場合は、より簡単になります。