如何访问groovy闭包注释?

如何访问groovy闭包注释?,groovy,annotations,closures,Groovy,Annotations,Closures,假设我在groovy代码中声明了一个带有如下注释的闭包: @GET('/heartbeat') def myClosure = { req, res -> res.end('OK') } 因此,现在在我的代码中,我想从闭包中提取GET注释,以便创建一些自动映射: public void doSomething(Closure closure) { closure.class.getAnnotations() // does not contain the GET annotati

假设我在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)

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

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