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