[英]HK2 TypeLiteral and wildcards
我正在嘗試將HK2與Jersey搭配使用。 我需要綁定非常奇怪的類型:
List<TransformationService<? extends Transformation, ? extends TransformationInfor>>
所以我的活頁夾定義如下:
resourceConfig.register(new AbstractBinder() {
@Override
protected void configure() {
List<TransformationService<? extends Transformation, ? extends TransformationInfo>> transformationServices = ... ;
bind(transformationServices)
.to(new TypeLiteral<List<TransformationService<? extends Transformation, ? extends TransformationInfo>>>() {});
// This class needs the list for its construction
bind(TransformationServiceImpl.class).to(TransformationService.class);
}
});
雖然運行代碼時出現異常,但無法插入列表(忽略了軟件包):
[11/20/15 16:46:34] WARNING org.glassfish.jersey.internal.Errors logErrors : The following warnings have been detected: WARNING: Unknown HK2 failure detected:
MultiException stack 1 of 3
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=List<TransformationService<? extends ...Transformation,? extends ...TransformationInfo>>,parent=TransformationServiceImpl,qualifiers={},position=3,optional=false,self=false,unqualified=null,334434299)
at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:74)
at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:214)
關於如何用HK2注入這樣的怪胎的任何提示?
據我了解,HK2注入規則對於CDI是相同的( 請參閱規格 )
在某些時候它提到:
但是,某些Java類型不是合法的bean類型:
- 類型變量不是合法的bean類型。
- 包含通配符類型參數的參數化類型不是合法的bean類型。
- 數組類型,其組件類型不是合法的bean類型。
我認為在我的示例中,我試圖創建包含通配符的參數化類型的 TypeLiteral
。
無論如何,就我而言,我刪除了該無界類型,並且它可以工作。 所需的更改是:
bind(transformationServices)
.to(new TypeLiteral<List<TransformationService>>() {});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.