java - 我的所有自定义注释都有一个通用的基本类型
问题描述
因此,我创建了几个自定义注释:
@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{
}
那是我无法@interface
为我的所有自定义注释类Foo
和Bar
. 所以,如果我创建了一个新的自定义注释,我需要else if
在上面的方法检查代码中添加更多条件,这很糟糕!有没有办法摆脱这个问题?我想要实现的是将我的方法检查代码概括为:
for (Method m : methods) {
if (m.isAnnotationPresent(MyBaseAnnotation.class)) {
...
}
}
如何实现?
解决方案
您可以使用基本自定义注释来注释您的自定义注释,就像组合注释一样。
代替:
public @interface Bar extends MyBaseAnnotation{
}
利用:
@MyBaseAnnotation
public @interface Bar {
}
推荐阅读
- jira - 为整个团队提供可访问远程桌面的屏幕共享工具推荐
- laravel - 在 Laravel 中编辑时验证(唯一)
- php - 如何使用带有优先订单号的自定义插件?
- .net-core - Azure AD OAuth 未经许可为受众生成令牌
- reactjs - 如何将包含 JSX 的字符串解析为 JSX 组件
- java - 在您看来,是因为我收到此错误的循环滴答声 (2) 非常低吗?BUKKIT 1.16.5(老板栏)
- google-apis-explorer - 方法:projects.androidApps.create 总是返回错误
- python - 计算字典中列表中单词的频率
- javascript - 如何在反应原生的onPress上重新启动计时器
- python - 在我的代码中分配函数调用的位置在哪里?为什么会出现错误?