Мне известно о @ClosureParams
аннотации. Похоже, что он охватывает только более сложные варианты использования. Я ищу что-то вроде , описанное здесь в разделе , аннотирующем замыкания . Что похоже на следующий фрагмент:
void doSomething(MyType src, @ClosureParams(MyType) Closure cl) { ... }
Этот пример больше не компилируется с более поздними версиями Groovy, к сожалению (сейчас я нахожусь на 2.5.8). Я знаю, что могу получить эквивалент с помощью:
void doSomething(MyType src, @ClosureParams(FirstParam) Closure cl) { ... }
Мой вариант использования не имеет никакого другого аргумента, кроме самого замыкания, хотя:
void doSomething(@ClosureParams(/* how? */) Closure cl) { ... }
Я могу взломать его как:
void doSomething(@ClosureParams(SecondParam) Closure cl, MyType ignore = null) { ... }
Это далеко не чисто, не так ли?
Я тоже могу пойти:
void doSomething(@ClosureParams(value = SimpleType, options = ['com.somepackage.MyType']) Closure cl) { ... }
Это не только уродливо и шумно, но и с типом, указанным в виде строкипредотвращает работу некоторых функций IDE. Например, MyType
refactor-rename или поиск типов использования здесь не будут приниматься.
Я полагаю, что нет более чистого способа добиться этого, поэтому тип можно указать в качестве типа. не строка и без лишних ненужных аргументов, не так ли?
Что-то вроде оригинального сообщения Cédric Champeau в сообщении в блоге, указанном выше, будет идеальным. Который в моем случае будет выглядеть так:
void doSomething(@ClosureParams(MyType) Closure cl) { ... }