Gar*_*ryF 6 java generics annotations
我想使用以下注释来注释给定bean类的一些字段:
@Target({FIELD})
@Retention(RUNTIME)
public @interface Process {
Class<? extends ProcessingStrategy> using() default DefaultImplStrategy.class;
}
Run Code Online (Sandbox Code Playgroud)
如果没有进入域太多,每个带注释的属性都需要在其上定义ProcessingStrategy,因此注释上的using()属性.这很好,按照我喜欢的方式工作.
我还想指定策略的默认实现,大部分时间都在使用(默认定义如下).这在Eclipse中运行良好.
但是,当我尝试使用常规JDK(通过maven调用)编译它时,我收到以下错误:
found : java.lang.Class<DefaultImplStrategy>
required: java.lang.Class<? extends ProcessingStrategy>
Run Code Online (Sandbox Code Playgroud)
我猜这是泛型,注释,类文字和默认的一些组合在这里有错,但老实说我不知道为什么.我已经看过JLS中有关默认值的规则,我似乎没有违反任何规定.
鉴于DefaultImplStrategy肯定实现了ProcessingStrategy,我在这里做错了什么?
简而言之,maven、Lombok 和默认注释的某些组合不能很好地协同工作。较长的版本位于 Lombok 邮件列表中。
解决方案相对简单:完全限定默认类型即
@Target({FIELD})
@Retention(RUNTIME)
public @interface Process {
Class<? extends ProcessingStrategy> using() default com.example.processing.DefaultImplStrategy.class;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3440 次 |
| 最近记录: |