Groovy:如何调用带注释的方法

2024-02-17

我在几个类中的某些方法的顶部粘贴了一个注释@MyAnnotation,如下所示:

FirstClass {
    @MyAnnotation
    doSomethingWith(String text) { println 'text from first class' }

    @MyAnnotation
    doSomethingWith(Foo foo) { println 'foo from first class' }

    @MyAnnotation
    doAlsoSomethingWith(Bar bar) { println 'bar from first class' }    
}

SecondClass {
    @MyAnnotation
    doOtherStuffWith(Foo foo) { println 'foo from second class' }    
}

GenericGateway {    
    execute(instancedParam) {
        // call something passing an instance of "Foo" class
        // call something passing an instance of "Bar" class
        // call something passing an instance of "String" class
    }   
}

现在我期望每个用 @MyAnnotation 注释的方法和相同方法的参数(不关心方法的名称 self)在运行时从基于实例化参数的“网关”调用。

// Example:

gateway.execute(new Foo(...))
gateway.execute('something')
gateway.execute(new Bar(...))

// I am expecting to see:

foo from first class
foo from second class
text from first class
bar from first class

如果我打算用 Java 来解决这个问题,我可能最终会使用“反射”API 并通过某种策略将方法名称映射到某个地方。有没有办法用 Groovy 做得更“优雅”?


我不知道有什么捷径可以简化 Java 的反射 API。但您始终可以从 Groovy 的简洁性中受益:

import java.lang.reflection.*
import java.lang.annotation.*

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface A {}

class Annotated {
  @A def a() { "a" }
  @A def b() { "b" }
  def c() { "c" }
}

ann = new Annotated()

methods = ann.class.methods.findAll { it.getAnnotation(A) }

assert methods.size() == 2

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

Groovy:如何调用带注释的方法 的相关文章

  • Java 8 文档日期时间教程错误

    The Oracle 临时查询教程页面 https docs oracle com javase tutorial datetime iso queries html显示此示例代码 Code TemporalQueries query Te
  • 为什么java中的BigInteger被设计成不可变的?

    在 java 中 BigInteger 是不可变的 但我想了解为什么 因为很多时候它用于进行大量计算 从而产生大量对象 所以 不让它变得不可变感觉有点直观 我想到的情况类似于字符串操作 然后是 StringBuilder 的选项 是否应该有
  • Mockito - 监视真实对象调用原始方法

    想象一下下面的代码 List list List spy spy list doThrow new NullpointerException when spy get 0 doThrow 执行list get 0 这根本没有意义 我想定义模
  • 使用synchronized关键字和lock有什么区别[重复]

    这个问题在这里已经有答案了 Java 5引入了lock方法 与synchronized关键字相比 使用lock有什么优点和缺点 同步 将锁定该方法内访问的任何资源 lock 允许您进行更精细的控制 例如 仅锁定某些资源 或者仅在满足特定条件
  • 在 Java 中使用并行性会使程序变慢(慢四倍!!!)

    我正在编写共轭梯度方法实现 我使用 Java 多线程进行矩阵反向替换 使用CyclicBarrier CountDownLatch 进行同步 为什么同步线程需要这么长时间 还有其他方法吗 代码片段 private void syncThre
  • 如何从号码选择器中跳过某些号码?

    选号器 np NumberPicker findViewById R id numberPicker1 np setMaxValue 200 np setMinValue 1 Button b Button findViewById R i
  • 如何解决 javax.net.ssl.SSLHandshakeException 错误?

    我通过 VPN 连接来设置库存 API 来获取产品列表 效果很好 一旦我从网络服务获得结果并绑定到用户界面 而且我将 PayPal 与我的应用程序集成在一起 以便在我拨打电话付款时进行快速结帐 但我遇到了此错误 我使用 servlet 进行
  • Motorola Android 2.2 相机忽略 EXTRA_OUTPUT 参数

    我以编程方式打开相机来拍摄视频 我告诉相机使用如下代码将视频文件放置到指定位置 Intent intent new Intent MediaStore ACTION VIDEO CAPTURE File out new File sdcar
  • 在 mule 中使用 groovy 表达式来限制 IP

    我在 mule 中使用 cxf 创建了一个代理服务 我的 mule 版本是 3 3 0 CE 现在 我想在使用代理服务创建的 wsdl 中添加限制 我的限制不应允许他们看到我的 wsdl 的每个 IP 为此 我找到了 Groovy 表达式和
  • 如何在 Spring Security 中创建自定义身份验证过滤器?

    我正在尝试创建一个自定义 Spring Security 身份验证过滤器以实现自定义身份验证方案 我花了几个小时阅读 Spring Security 但我找到的所有指南都解释了如何配置基本设置 我正在尝试编写自定义设置 但无法找到有关如何执
  • 本机查询 (JPA) 未重置并返回相同的旧结果

    我有一个本机 sql 查询如下 for init i 0 i lt 2 i String sql Select from accounts where id Query query em createNativeQuery sql Acco
  • 为自定义 userdetailsservice 定义 bean

    我如何定义我的自定义UserDetailsServicebean 的方式使我的 spring mvc Web 应用程序能够使用我的底层 MySQL 数据库来检查用户和密码的身份验证 具体如下 我正在添加安全性spring petclinic
  • Java中对象类的继承

    当我读java书时 我遇到了 每个类都扩展类 Object 但是如果想要 B 类扩展 A 类 但是 B 类现在将具有多重继承 一个来自 Object 类 一个来自 A 类 如何解决冲突 谁能解释一下吗 它是多级继承 而不是多重 class
  • Java 8 Streams - 嵌套映射到列表

    firstlist stream map x gt return secondList stream map y gt return a string collect Collectors toList Output I need Get
  • 从多个文本文件读取数据[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我是Java编程新手 我正在尝试打印
  • 使用可变参数绘制星形

    我的任务是编写程序 允许用户绘制星星 星星的大小和手臂数量可能不同 当我处理基本星时 我使用 GeneralPath 和点表进行处理 int xPoints 55 67 109 73 83 55 27 37 1 43 int yPoints
  • 信号量如何工作?

    信号量可以小于0吗 我的意思是 假设我有一个 N 3 的信号量 并且我调用 down 4 次 那么 N 将保持为 0 但一个进程将被阻塞 反之亦然 如果一开始我调用 N 可以大于 3 吗 因为在我看来 如果 N 可以高于 3 如果一开始我调
  • 如何在android中动态创建按钮?

    我想创建一个这样的页面 这 7 个按钮已经存在 但如果用户想添加更多类别 按钮 那么他可以使用 按钮并使用删除 按钮 有制作这个的想法或教程吗 创建 删除按钮onClick of button and button如下 public voi
  • Java/Android 字符串到颜色的转换

    我正在制作一个应用程序 我希望能够通过用户输入 edittext 和十六进制值设置各种颜色 例如 eeeeee等等 问题是我似乎不知道如何转换它们 如果我在代码中做这样的事情 它工作得很好 标题栏 setBackgroundColor 0x
  • Spring Boot 应用程序崩溃

    请告诉我哪里有问题 我尝试启动我的第一个在 Spring Boot 上开发的应用程序 我已经在 SpringMVC 上有了简单的 Web 项目 现在我喜欢在 BOOT 上构建它 这是错误输出 org springframework bean

随机推荐

  • 如何将 Geodjango 与 Google Maps API 3 集成?

    我有一个包含多个字段的 geodjango 查询集 但只想使用user name and location 一个点字段 我想将其用作谷歌地图 API 3 中的标记 请耐心等待 因为我不懂 JavaScript 而且我有一系列问题 将此视为新
  • 复制工作表中的所有内容vba

    Copy wb Sheets wsSource Name Range A1 W79 Copy Paste Special wbTarget Sheets Sheet1 Range A1 W79 PasteSpecial xlValues w
  • 如何从堆栈历史记录中清除特定活动?

    假设我有一个应用程序 其中包含名为 A B C D 的活动 现在 考虑 A 已作为根活动启动 B 已从 A 启动 C 已从 B 启动 D 已从 C 启动 现在我在活动 D 中有一个名为 删除 的按钮 如果假设 我按下活动 D 中的 删除 按
  • 使用 Swift 从 Firebase 存储中检索图像

    我正在寻找从 Firebase 存储检索图像的开始到结束代码示例 只是为了显示图像 作为图像视图或表格 我看过这里的帖子和各种教程 总感觉好像漏掉了什么 如果我能看到全貌 我就能更好地理解这一点 所附代码是我当前尝试将 photo1 从本地
  • 安装VS2008后,在winnt.h中出现编译错误

    我正在尝试将我们的项目从 VS2005 转移到 VS2008 并且在 MFC 项目上遇到此构建错误 C Program Files Microsoft SDKs Windows v6 0A include winnt h 236 error
  • 此插件在本文档中为此 Google 用户帐户创建了太多基于时间的触发器

    我收到标题中的错误 此附加组件在本文档中为此 Google 用户帐户创建了太多基于时间的触发器 当我运行附加组件时 该插件用于创建时间触发器 我在 3 个文档中一起创建了 7 个触发器 现在我无法在任何文档中创建新的触发器 ScriptAp
  • 创建 SOAP 代理?

    我想创建一个 SOAP 代理 它修改原始 Web 服务 SOAP 标头 nampespace 并保持主体相同 做这个的最好方式是什么 创建一个 SOAP 提供程序 使用原始 Web 服务 然后修改标头和名称空间 这看起来工作量很大 如果您的
  • 通过 Javascript 获取图像的平均颜色

    不确定这是否可行 但希望编写一个返回平均值的脚本hex or rgb图像的值 我知道它可以在 AS 中完成 但希望在 JavaScript 中完成 AFAIK 做到这一点的唯一方法是
  • 更改 R 中 onRender() htmlWidgets 散点图中的线条粗细和不透明度

    我希望使用 R 包 htmlwidgets 的 onRender 函数绘制一个图 其中用户可以单击一个点并绘制一条线 我现在工作的关键是 以默认的粗细和默认的不透明度绘制一条灰线 然而 我一直坚持改变线条的粗细 并且可能改变线条的不透明度
  • 将 SpringBoot Api 部署到 IIS Web 服务器

    我使用 gradle build 创建了 spring boot api 在我当地一切正常 我在 IIS Web 服务器的 Sites DefaultsTest 中部署了角度应用程序 它运行在https example app com ap
  • 物体可以自我毁灭吗?

    我有一个需要自我毁灭的物体 能做到吗 例子有错吗 void Pawn specialMoves Coordinate const from Coordinate const to int passant m board gt replace
  • 从递归函数返回多个值

    我遇到这个问题 我必须将十进制数转换为二进制 然后将这些位存储在链表中 其中头节点是最高有效位 最后一个节点是最低有效位 解决问题本身其实很简单 只需不断递归地对 2 取模 并将结果添加到列表中 直到十进制数变为 0 即可 我陷入困境的是
  • 用于查找素数的 Haskell 列表理解

    我试图找到所有小于某个整数的素数n使用列表理解尽可能简洁 我正在学习 Haskell 这只是一个练习 我想写一些类似的东西 isqrt Integral a gt a gt a isqrt floor sqrt fromIntegral p
  • 如何比较我的变量是否在 shell 脚本中包含换行符

    我有一个脚本 其中有一行将获取的第三行放入我的变量中 如下所示 variable sed n 3 p home nmsadm abc txt So variable保存这个值 它位于 abc txt 的第三行 就我而言 将是单字线或空 空白
  • 使用BeautifulSoup提取两个节点之间的兄弟节点

    我有一个这样的文档 p class top I don t want this p p I want this p table table img p and all that stuff too p p class p
  • Spring Boot 中的多个数据源和架构创建

    我正在使用 Spring Boot 我终于设法设置了两个数据源 但现在我面临另一个问题 有两个数据源spring jpa hibernate ddl auto create似乎在我的 Spring Boot 应用程序中停止工作 仅sprin
  • 未找到 ID 为“android”的插件(Android Studio)

    我最近刚刚切换到 Android Studio 0 6 1 进行应用程序开发 并且遇到了 gradle 问题 I get Error 1 0 Plugin with id android not found 我很新 所以任何帮助将不胜感激
  • 使一个相当复杂的 Django 模型方法可以在管理中排序?

    我有一个相当复杂的自定义 Django 模型方法 它在管理界面中可见 我现在想让它在管理界面中也可排序 我已经添加admin order field按照推荐在上一个问题中 https stackoverflow com questions
  • 为什么我的导航栏不居中?

    我一直在尝试一切方法来尝试将这个导航栏居中 但它从来没有这样做 文本对齐不起作用 margin 0 auto 也不起作用 我尝试尽可能多地添加它以覆盖所有空间 因为无论如何它都不起作用 这是 HTML div class nav div c
  • Groovy:如何调用带注释的方法

    我在几个类中的某些方法的顶部粘贴了一个注释 MyAnnotation 如下所示 FirstClass MyAnnotation doSomethingWith String text println text from first clas