gpt4 book ai didi

java - 自定义注解参数化继承其他注解

转载 作者:行者123 更新时间:2023-12-01 22:28:55 26 4
gpt4 key购买 nike

我有一个参数化注释(在本例中为@MiTag1)。我想创建一个新的注释(@MiTag2),它扩展了@MiTag1和其他注释,并且我想要@MiTag1的值> 通过 @MiTag2

的值“扩展”

在我的代码示例中,@MiTag2("bla") 必须与 @MiTag1("bla") 相同,但内部没有硬编码“bla” @MiTag2

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MiTag1 {

/**
* The resource key.
*
* @see Resources
*/
String value();
}

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@MiTag1(value = THIS.VALUE)
public @interface MiTag2 {

/**
* The resource key.
*
* @see Resources
*/
String value();
}

最佳答案

Java 不允许您从另一个注释进行扩展。这是设计使然,因为它会引入相当复杂的类型系统。这个问题已经详细解答here ,但重要的部分是:

Why don’t you support annotation subtyping (where one annotation type extends another)?

It complicates the annotation type system, and makes it much more difficult to write “Specific Tools”.

“Specific Tools” — Programs that query known annotation types of arbitrary external programs. Stub generators, for example, fall into this category. These programs will read annotated classes without loading them into the virtual machine, but will load annotation interfaces.

(来自pedromarce的原始答案)

要绕过此问题,您可以使用两个注释来注释您的目标类型@MiTag1 @MiTag2 并将应该继承注释的默认值设置为父注释的值。

此外,您还可以使用组合而不是继承,并将 @MiTag2 类型的注释添加到 @MiTag2

关于java - 自定义注解参数化继承其他注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58557232/

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