使用 Guice 3.0,我尝试注入一个可以抛出特定检查异常的 Provider。所以我使用Throwing Providers 扩展。
我为 Provider 创建了一个接口:
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
{
//...
}
}
我在要注入 Provider 的对象上使用 @Inject 注释:
@Inject
public SomeConstructor(IMyProvider<List<SomeType>> myProvider)
{
//...
}
现在,我的问题是:如何绑定这个 Provider?
由于使用了泛型,我想使用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
不需要该课程,那就更容易了!