Что означает @ перед именем поля в Groovy?Для некоторых классов я могу получить доступ к закрытым полям, которые не доступны напрямую, например, ComposedClosure :
public class Person { private String name } def u = new Person(name:"Ron") println u.@name //Ron println u.name //Ron a = {2} >> {3} println a.@first //first closure object println a.first //runtime error
Это позволяет вам переопределить использование Groovy свойств доступа. Если вы напишите:
println u.name
groovy вызовет автоматически сгенерированный метод получения Person.getName (). Если вы напишите:
println u.@name
он будет идти прямо к полю, как в Java. В случае замыкания оно, похоже, имеет поле first, но не соответствует соответствующему элементу доступа getFirst.
first
getFirst
В руководстве Groovy это задокументировано как оператор прямого доступа к полю .
Это означает, что вы получаете доступ к полю напрямую, а не через геттер.
См. Документы Groovy , хотя сказать больше нечего. Кроме, вероятно, избежать этого.
Причина сбоя ComposedClosure заключается в том, что для first (или second) нет геттера.
ComposedClosure
second