簡體   English   中英

HK2類型文字和通配符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM