【问题标题】:how to access groovy closure annotations?如何访问 groovy 闭包注释?
【发布时间】:2014-04-16 10:01:27
【问题描述】:

说在我的 groovy 代码中,我已经声明了一个带有一些注释的闭包,如下所示:

@GET('/heartbeat')
def myClosure = { req, res ->
  res.end('OK')
}

所以现在在我的代码中,我想从闭包中提取 GET 注释,这样我就可以创建一些自动映射:

public void doSomething(Closure closure) {
  closure.class.getAnnotations() // does not contain the GET annotation...
}

我怎样才能得到它?

所以完整的代码是:

@GET('/heartbeat')
def myClosure = { req, res ->
  res.end('OK')
}

public void doSomething(Closure closure) {
  closure.class.getAnnotations() // does not contain the GET annotation...
}

doSomething(myClosure)

【问题讨论】:

  • myClosure 是字段还是局部变量?
  • 我认为我们可能会涉足 JSR-308 和 Java 8 领域。在此之前,我认为不可能在局部变量上获取运行时注释信息。话虽如此,我正在努力寻找一个使用 Java 8 的工作示例:-/
  • 他的例子表明他想查看一个方法的参数(在他的例子中,“doSomething”方法的“closure”参数)并询问该对象并期望发现注释附加到恰好指向该对象的变量引用。即使使用 Java 8 和 JSR-308,它也无法正常工作,不是吗?我不认为这是可能的。可以有任意数量的变量(局部变量和/或字段)都指向同一个对象,并且所有这些变量都可以有不同的注释集。

标签: groovy annotations closures


【解决方案1】:

你不能。注释与字段相关联,而不是与字段的值相关联。闭包是字段的值。当您执行诸如closure.class.getAnnotations() 之类的操作时,您要求的是 groovy.lang.Closure 类上的注释,而不是“closure”变量所指的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 2015-07-30
    • 1970-01-01
    • 2021-08-16
    相关资源
    最近更新 更多