繁体   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