Java Guice“;投掷提供者“如何使用泛型绑定到类型?

Java Guice“;投掷提供者“如何使用泛型绑定到类型?,java,guice,guice-3,Java,Guice,Guice 3,使用Guice3.0,我尝试注入一个可以抛出特定检查异常的提供程序。所以我就用这个 我为提供程序创建了一个接口: public interface IMyProvider<T> extends CheckedProvider<T> { @Override T get() throws MyException; } @Inject public SomeConstructor(IMyProvider<List<SomeType>>

使用Guice3.0,我尝试注入一个可以抛出特定检查异常的提供程序。所以我就用这个

我为提供程序创建了一个接口:

public interface IMyProvider<T> extends CheckedProvider<T> 
{
    @Override
    T get() throws MyException;
}
@Inject
public SomeConstructor(IMyProvider<List<SomeType>> myProvider)
{
    //...
}
public class SomeTypeList extends ArrayList<SomeType>
但是对于这个bind()方法,
TypeLiteral
似乎不是有效的参数

我错过什么了吗

更新:

我找到了一个解决办法。通过创建扩展
ArrayList
的类,我可以绑定提供程序:

public interface IMyProvider<T> extends CheckedProvider<T> 
{
    @Override
    T get() throws MyException;
}
@Inject
public SomeConstructor(IMyProvider<List<SomeType>> myProvider)
{
    //...
}
public class SomeTypeList extends ArrayList<SomeType>

但是如果不需要
SomeTypeList
类,那就更容易了

您正在寻找一个
Type
实例,而
TypeLiteral
并不是本机实现的

我没有直接使用它,但是Guice提供了一个类,还有一个方法。请尝试以下操作之一:

  • Types.listOf(SomeType.class)
  • Types.newParameterizedType(List.class,SomeType.class)
  • (新的TypeLiteral(){}).getType()
我的偏好是第一种,如下所示:

ThrowingProviderBinder
    .create(binder())
    .bind(IMyProvider.class, Types.listOf(SomeType.class))
    .to(MyProvider.class);

他们都工作!有一个小改动:“(new TypeLiteral(){}).getType()”应该是“(new TypeLiteral(){}).getType()”。谢谢你,杰夫@电铸哎呀!谢谢你接电话。答案已更新。很乐意帮忙!