Подтвердить что ты не робот

Groovy @символ перед полями

Что означает @перед именем поля в Groovy? Для некоторых классов я могу получить доступ к закрытым полям, которые не доступны напрямую, например ComposedClosure:

public class Person {
  private String name
}

def u = new Person(name:"Ron")
println [email protected] //Ron
println u.name //Ron

a = {2} >> {3}
println [email protected] //first closure object
println a.first //runtime error
4b9b3361

Ответ 1

Это позволяет вам переопределить использование groovy аксессуаров свойств. Если вы пишете:

println u.name

groovy будет вызывать автоматически созданный getter Person.getName(). Если вы пишете:

println [email protected]

он перейдет непосредственно в поле, как в Java. В случае замыкания он, похоже, имеет поле first, но не соответствующий аксессуар getFirst.

В руководстве groovy он задокументирован как прямой оператор доступа к полю.

Ответ 2

Это означает, что вы напрямую обращаетесь к полю, а не через getter.

См. Groovy операторские документы, хотя говорить об этом не о чем. Другие, чем возможно, избегают этого.

Причина, по которой это не удается для ComposedClosure, заключается в том, что нет никакого getter для first (или second).