JAX-RS在ApplicationBinder中绑定泛型类型的实现

时间:2015-11-25 17:51:26

标签: java generics jax-rs jersey-2.0

是否可以在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!
}

1 个答案:

答案 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文档中的详情。