簡體   English   中英

在注釋上使用默認的類文字值

[英]Using a default class literal value on an annotation

我想使用以下注釋來注釋給定bean類的一些字段:

@Target({FIELD})
@Retention(RUNTIME)
public @interface Process {

    Class<? extends ProcessingStrategy> using() default DefaultImplStrategy.class;

}

如果沒有進入域太多,每個帶注釋的屬性都需要在其上定義ProcessingStrategy,因此注釋上的using()屬性。 這很好,按照我喜歡的方式工作。

我還想指定策略的默認實現,大部分時間都在使用(默認定義如下)。 這在Eclipse中運行良好。

但是,當我嘗試使用常規JDK(通過maven調用)編譯它時,我收到以下錯誤:

found   : java.lang.Class<DefaultImplStrategy>
required: java.lang.Class<? extends ProcessingStrategy>

我猜這是泛型,注釋,類文字和默認的一些組合在這里有錯,但老實說我不知道​​為什么。 我已經看過JLS中有關默認值的規則,我似乎沒有違反任何規定。

鑒於DefaultImplStrategy肯定實現了ProcessingStrategy,我在這里做錯了什么?

簡短的版本是maven,Lombok和默認注釋的某些組合不能很好地結合在一起。 較長的版本在Lombok郵件列表中

解決方案相對簡單:完全限定默認類型即

@Target({FIELD})
@Retention(RUNTIME)
public @interface Process {

    Class<? extends ProcessingStrategy> using() default com.example.processing.DefaultImplStrategy.class;

}

不知道為什么,但是如果你給出了DefaultImplStrategy的完整類路徑,它可能會起作用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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