Java寻找具有特定注释的方法及其注释元素

2023-12-02

假设我有这个注释类


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodXY {
    public int x();
    public int y();
}

public class AnnotationTest {
    @MethodXY(x=5, y=5)
    public void myMethodA(){ ... }

    @MethodXY(x=3, y=2)
    public void myMethodB(){ ... }
}

那么有没有一种方法可以查看一个对象,使用 @MethodXY 注释“寻找”该方法,其中它的元素 x = 3,y = 2,并调用它?

Thanks


这是一个方法,它返回带有特定注释的方法:

public static List<Method> getMethodsAnnotatedWith(final Class<?> type, final Class<? extends Annotation> annotation) {
    final List<Method> methods = new ArrayList<Method>();
    Class<?> klass = type;
    while (klass != Object.class) { // need to traverse a type hierarchy in order to process methods from super types
        // iterate though the list of methods declared in the class represented by klass variable, and add those annotated with the specified annotation
        for (final Method method : klass.getDeclaredMethods()) {
            if (method.isAnnotationPresent(annotation)) {
                Annotation annotInstance = method.getAnnotation(annotation);
                // TODO process annotInstance
                methods.add(method);
            }
        }
        // move to the upper class in the hierarchy in search for more methods
        klass = klass.getSuperclass();
    }
    return methods;
}

它可以根据您的特定需求轻松修改。请注意,提供的方法遍历类层次结构以查找具有所需注释的方法。

以下是满足您特定需求的方法:

public static List<Method> getMethodsAnnotatedWithMethodXY(final Class<?> type) {
    final List<Method> methods = new ArrayList<Method>();
    Class<?> klass = type;
    while (klass != Object.class) { // need to iterated thought hierarchy in order to retrieve methods from above the current instance
        // iterate though the list of methods declared in the class represented by klass variable, and add those annotated with the specified annotation
        for (final Method method : klass.getDeclaredMethods()) {
            if (method.isAnnotationPresent(MethodXY.class)) {
                MethodXY annotInstance = method.getAnnotation(MethodXY.class);
                if (annotInstance.x() == 3 && annotInstance.y() == 2) {         
                    methods.add(method);
                }
            }
        }
        // move to the upper class in the hierarchy in search for more methods
        klass = klass.getSuperclass();
    }
    return methods;
}

要调用找到的方法,请参阅tutorial。这里的潜在困难之一是方法参数的数量,这些参数在找到的方法之间可能有所不同,因此需要一些额外的处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java寻找具有特定注释的方法及其注释元素 的相关文章

  • 何时/为何使用/定义接口[重复]

    这个问题在这里已经有答案了 可能的重复 何时最好使用 java 中的接口 https stackoverflow com questions 2586389 when best to use an interface in java Hi
  • 多线程环境下如何更好的使用ExecutorService?

    我需要创建一个库 其中包含同步和异步方法 executeSynchronous 等待直到有结果 返回结果 executeAsynchronous 立即返回一个 Future 如果需要 可以在其他事情完成后进行处理 我的图书馆的核心逻辑 客户
  • 如何迭代所有注册表项?

    我正在尝试迭代所有注册表项以查找 包含 并删除 jre1 5 0 14 值 有办法做到吗 下面的代码只是在特定键下找到jre1 5 0 14 我确实想迭代所有的键 顺便说一句 if 子句获取是否等于 jre1 5 0 14 但如果它包含 j
  • JavaFX Platform.runLater 的使用以及从不同线程访问 UI

    我有几个问题Platform runLater 我有一个 JavaFX 应用程序类 在这个类中 我运行一个线程 该线程从网络套接字读取数据 现在当我创建一个新的Stage在线程内部 系统抛出异常 JavaFX 事件调度程序线程和我的网络读取
  • 如何在Java 8中实现Elvis运算符?

    我有一个经典的 Elvis 运算符 案例 其中我调用每个可能返回 null 的方法并将它们链接在一起 thing nullableMethod1 a nullableMethod2 b nullableMethod3 在 Java 8 中
  • 使用 jpql 和 jpa 从日期字段中提取年份

    我想从数据库中的一行中提取年份部分 以便将其与值进行比较 这是我的功能 public List
  • 无法实例化接收器 com.parse.GcmBroadcastReceiver

    我正在编写一个使用 GCM 通知和解析推送的离子应用程序 这个应用程序正在使用这些插件 com ionic keyboard 1 0 3 Keyboard com phonegap plugins PushPlugin 2 4 0 Push
  • 尝试在java中的Arraylist中查找对象的所有出现

    我有一个 Java ArrayList 我需要查找其中出现的所有特定对象 ArrayList indexOf Object 方法只找到一次出现 所以看来我还需要其他东西 我认为你不需要太花哨 以下应该可以正常工作 static
  • Java 唤醒休眠线程

    我阅读了其他帖子 但没有找到我正在寻找的确切答案 所以我希望有人能给出一些澄清 我有一个将运行一段时间的程序 我有一些在后台运行的线程来执行各种任务 为了简单起见 让我们考虑 3 个线程 ThreadA每 10 秒执行一次任务 其中Thre
  • Java元数据读写

    是否可以以通用方式 对于所有图像类型 在 Java 中读取和写入元数据 我找到了一些示例 但它们总是特定的 例如 JPEG 或 PNG 我需要一些足够通用的东西 而不是到处都有 if else 语句 我不想重写源代码 但这是一个很好的例子
  • HTTP PUT 在 Java 中上传文件

    Edit 我想我已经弄清楚如何执行二进制数据部分 仔细检查代码 但我很确定我做对了 现在 当我尝试按照中所述完成上传时遇到新错误Vimeo API 文档 http vimeo com api docs upload streaming Ed
  • Java ConcurrentModificationException [重复]

    这个问题在这里已经有答案了 当删除倒数第二个元素时 没有 ConcurrentModificationException List
  • 在Java中多次读取System.in会导致IOException?

    我正在尝试创建一个小命令行游戏来强化我在过去几个月中在 Java 中学到的一些东西 我正在尝试创建一个名为 readInput 的方法 它返回一个我可以一次又一次调用的字符串 第一次它工作正常 但第二次它会导致 IO Exception 如
  • 我们可以使用 for-each 循环来迭代 Iterator 类型的对象吗? [复制]

    这个问题在这里已经有答案了 如果我们执行以下操作 我们会收到错误 class FGH public static Iterator reverse List list Collections reverse list return list
  • 我们可以有虚假中断吗?

    我正在创建一个任务轮询器 每分钟都会查找任务 它看起来像这样 public class Poller private final ExecutorService e Executors newSingleThreadExecutor pub
  • 找不到符号assertEquals

    我正在尝试为计算器编写第一个单元测试 但 NetBeans 说它找不到该符号assertEquals和注释 Test 我应该包括一些东西吗 我正在使用 NetBeans 7 3 1 和 W7 package calculator impor
  • 读/写带有特殊字符的.txt文件

    I open Notepad Windows 并写 Some lines with special characters Special 并前往另存为 someFile txt 与Encoding set to UTF 8 在Java中我有
  • H2 - (相当)长的 INSERT 失败,错误 42000

    H2 内存中 插入 错误 42000 尝试过版本 1 4 196 1 4 197 1 4 199 我还尝试在 H2 服务器 本地 上执行 INSERT 也失败 给出错误的行 抱歉 但出于安全原因 我无法生成更多 INSERT INTO tb
  • 编写自定义 Eclipse 调试器

    EDIT 一定有某种方法可以解决这个问题 而无需编写全新的调试器 我目前正在研究在现有 java 调试器之上构建的方法 如果有人对如何获取 Java 调试器已有的信息 有关堆栈帧 变量 原始数据等 有任何想法 那将非常有帮助 我想要做的是我
  • 如何在java 1.8中从org.jboss.jca.adapters.jdbc.jdk8.WrappedConnectionJDK8转换为oracle.jdbc.OracleConnection

    如何在 java 1 8 中从 org jboss jca adapters jdbc jdk8 WrappedConnectionJDK8 转换为 oracle jdbc OracleConnection 目前我正在这样使用并得到以下异常

随机推荐

  • 如何为svg提供响应式设计?

    我是拉斐尔的新手 我在div里面写了svg标签 请参阅此示例http jsfiddle net dhana36 bvs6P 1 使用 CTRL 和 CTRL 你会发现区别 HTML div class outer div
  • 递归思维的算法是什么? (就具体例子而言)

    我就是无法理解递归 我理解所有概念 将解决方案分解为更小的案例 并且在一遍又一遍地阅读它们后我可以理解解决方案 但我始终无法弄清楚如何使用递归来解决问题 有没有系统的方法来提出递归解决方案 有人可以向我解释一下他们尝试解决以下递归问题时的思
  • Android - 动态添加视图到视图中

    我有一个视图布局
  • INNO设置:如何获取主显示器的分辨率?

    我正在尝试使用 INNO 编写安装程序脚本 但我陷入了困境 我需要获取运行安装程序的计算机的屏幕分辨率 并使用该值在桌面上创建一个以该分辨率为一的快捷方式的论点 我知道如何创建快捷方式 但是我不知道如何提取屏幕分辨率以及如何传递该信息 可能
  • 在 CUDA 中,什么是内存合并,它是如何实现的?

    CUDA 全局内存事务中的 合并 是什么 即使读完我的 CUDA 指南后我还是无法理解 怎么做 在CUDA编程指南矩阵示例中 逐行访问矩阵称为 合并 或者逐列访问矩阵称为合并 哪一个是正确的 为什么 此信息可能仅适用于计算能力 1 x 或
  • 启用 COM 接口封送处理需要什么?

    我有一个没有类型库的 32 位 ATL COM 组件 它为一个给定的类提供了一个类工厂 该类实现了多个接口 当我将它用作进程内服务器时 一切正常 客户端调用 CoCreateInstance 实例化对象 并且 QueryInterface
  • 使用实体框架导航属性而不创建大量查询(避免 N+1)

    我一直在使用 Entity Framework Profiler 来测试 MVC 项目中的数据访问 并且遇到了几个页面 其中由于 N 1 问题 我进行的数据库查询远多于我需要的数量 这是一个简单的例子来说明我的问题 var club thi
  • 将字符串拆分为 | Java 中的(管道)[重复]

    这个问题在这里已经有答案了 我有以下文字 ARIYALUR ARIYALUR CHENNAI CHENNAI COIMBATORE COIMBATORE CUDDALORE CUDDALORE DINDIGUL DINDIGUL ERODE
  • 在 Yii 框架中设置会话

    我正在用 Yii 开发一个网站 我的页面中有一个按钮 我需要在用户单击它时设置一个会话变量 并在用户单击另一个按钮时获取会话值 我怎样才能做到这一点 Use CWebUser状态方法 set session variable Yii app
  • 对 stackexchange api 的 Http 请求返回不可读的 json

    我正在尝试从 stackexchange api 获取一些 json 数据 接收 OAuth 代码和访问令牌工作正常 但是当调用实际的数据获取端点时 响应看起来确实很奇怪 可能是编码或类似的 该请求如下所示 var client reque
  • 如果网络中断,socket 会发生什么情况

    假设一个简单的网络模型 A 已成功创建到 B 的 TCP 连接 并且它们正在这样相互通信 A lt gt B 我知道如果A上的程序死掉 例如核心转储 这将导致向B发送RST数据包 因此B的任何读取尝试都会导致EOF 而B的任何写入尝试都会导
  • 从城市名称获取纬度和经度

    在我当前的 Android 应用程序中 我想根据输入的城市名称 街道名称或邮政编码获取坐标 我怎样才能做到这一点 此致 通过网络获取地理坐标 private static JSONObject getLocationInfo String
  • 如何根据另一个向量中的条件从向量中删除元素?

    我有两个等长的向量 我想根据其中一个向量中的条件从中删除元素 应对两者应用相同的删除操作 以便索引匹配 我想出了一个解决方案std erase 但速度非常慢 vector
  • 带问号的 nvarchar 列结果

    我正在尝试更新队列项目并检索其列文本内容 问题是诸如希伯来字符之类的特殊符号会导致问号 通过直接制作 我可以完美地看到文本SELECT条款 在sql management studio Message s column hey 当我尝试检索
  • 导入模块中全局变量的可见性

    我在 Python 脚本中导入模块时遇到了一些困难 我将尽力描述该错误 为什么会遇到它 以及为什么我要使用这种特定的方法来解决我的问题 我将在稍后描述 假设我有一个模块 在其中定义了一些实用函数 类 它们引用在将导入该辅助模块的命名空间中定
  • @font-face src: local - 如果用户已经拥有本地字体,如何使用它?

    正确的使用方法是什么 font face这样如果用户已经拥有该字体 浏览器就不会下载该字体 我正在使用 font face 来定义 DejaVu 它已经安装在我的系统 linux 上 Firefox 不下载字体 但 Chromium 每次都
  • 使用 NodeJS 中的服务主体连接到 Azure SQL,但令牌被拒绝

    我在使用服务主体让 NodeJS 应用程序连接到 Azure SQL 数据库时遇到问题 但是 当我尝试使用 C 代码片段执行相同的操作时 效果很好 我注意到两种语言的身份验证返回的令牌有点不同 如果我从 C 获取正确的令牌并将其硬编码到 N
  • 如何获取 Alexa 技能的用户日期/时间或时区信息?

    我正在使用 Lambda Python 来开发一项技能 并且我有兴趣为用户提供一些与时间相关的信息 上request对象有一个timestamp但那是没有偏移的 UTC 有没有一种方法可以找到用户的日期 时间或时区 而不必询问位置信息 如果
  • 类型错误:observable.of 不是函数 - [电子邮件受保护] - [电子邮件受保护] - angular5

    升级到后 电子邮件受保护 并将所有 RxJS 导入 方法和运算符转换为新的 gt 5 5 形式 我在运行时收到类型错误 Observable of不是一个函数 定义为扩展的成员的所有方法都会发生相同的错误Observable 例如 Obse
  • Java寻找具有特定注释的方法及其注释元素

    假设我有这个注释类 Retention RetentionPolicy RUNTIME Target ElementType METHOD public interface MethodXY public int x public int