Java Guice“;投掷提供者“如何使用泛型绑定到类型?
使用Guice3.0,我尝试注入一个可以抛出特定检查异常的提供程序。所以我就用这个 我为提供程序创建了一个接口: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>>
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()”。谢谢你,杰夫@电铸哎呀!谢谢你接电话。答案已更新。很乐意帮忙!