В Groovy, как получить значения аннотаций для параметров внутри замыканий? - PullRequest
0 голосов
/ 29 октября 2019

Например, с помощью этого кода:

import java.lang.annotation.Retention
import java.lang.annotation.RetentionPolicy
import java.lang.annotation.ElementType
import java.lang.annotation.Target

@Target([ElementType.PARAMETER])
@Retention(RetentionPolicy.RUNTIME)
@interface Bar {
  String qux() default ""
}

def closure1 = { @Bar(qux = 'zxv') String foo ->
  println foo
}

println "[value for qux]"

Как бы вы вывели значение для qux (в нашем случае это zxv)?

1 Ответ

3 голосов
/ 29 октября 2019

Reflection API может дать вам то, что вы ищете (я использую Groovy 2.5 на Java 8).

Закрытие - это, по сути, метод с именем call для Закрытие instance, и parameterAnnotations[0][0] - быстрый способ получить первую аннотацию первого параметра этого метода .

def anno = closure1.class.methods.find { it.name == 'call' }.parameterAnnotations[0][0]
println anno.qux() // prints zxv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...