gpt4 book ai didi

java - 我所有的自定义注释都有一个通用的基类型

转载 作者:行者123 更新时间:2023-11-30 12:03:02 24 4
gpt4 key购买 nike

因此,我创建了几个自定义注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Foo {

}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Bar {

}

我的函数中使用了这些注释:

public class Worker {

@Foo
public void doTaskOne() {...}

@Bar
public void doTaskX() {...}

...
}

我想使用 java 反射来检查是否在一个方法中声明了某个注释。

for (Method m : methods) {
if (m.isAnnotationPresent(Foo.class)) {
...
} else if (m.isAnnotationPresent(Bar.class)) {
...
}
}

问题在于,由于在 Java 中,自定义注释 @interface 无法扩展。我的意思是这是非法的:

public @interface Bar extends MyBaseAnnotation{
}

那是我无法为所有自定义注释类 FooBar 提供基础 @interface。所以,如果我创建了一个新的自定义注释,我需要在上面的方法检查代码中添加更多的 else if 条件,这很糟糕!无论如何要摆脱这个问题?我想要实现的是将我的方法检查代码概括为:

for (Method m : methods) {
if (m.isAnnotationPresent(MyBaseAnnotation.class)) {
...
}
}

如何实现?

最佳答案

您可以使用基本自定义注释来注释您的自定义注释,例如 composed annotations做。

代替:

public @interface Bar extends MyBaseAnnotation{
}

使用:

@MyBaseAnnotation
public @interface Bar {
}

关于java - 我所有的自定义注释都有一个通用的基类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58029426/

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