gpt4 book ai didi

java - 在注解上使用默认的类文字值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:27:19 27 4
gpt4 key购买 nike

我想用下面的注释来注释给定 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 和默认注释的某些组合不能很好地协同工作。较长的版本是 on the Lombok mailing list .

解决方案相对简单:完全限定默认类型即

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

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

}

关于java - 在注解上使用默认的类文字值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3558279/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com