是否可以在AbstractBinder的实现中绑定具有类型参数的类?
通用存储库类
public class Repository<T>{ ... }
服务类
public class AccountService{
Repository<User> repository;
@Inject
public AccountService(Repository<User> repository){
this.repository = repository;
}
}
在绑定器中绑定通用存储库
public class ApplicationBinder extends AbstractBinder {
@Override
protected void configure() {
bind(Repository<User,Long>).to(Repository<User,Long>.class); <=== not working!
}
答案 0 :(得分:0)
您可以使用TypeLiteral
支持使用实际类型参数表示参数化类型的对象的内联实例化。可以通过继承
TypeLiteral
来获得表示任何参数化类型的对象。TypeLiteral<List<String>> stringListType = new TypeLiteral<List<String>>() {};
而不是bind
,您需要使用bindAsContract(TypeLiteral)
,因为没有bind
方法接受TypeLiteral
[ 1 < /强>
bindAsContract(new TypeLiteral<Repository<User, Long>>(){});
[ 1 ] - 请参阅AbstractBinder
文档中的详情。