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

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

25 голосов
/ 30 ноября 2011

Что означает @ перед именем поля в 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

Ответы [ 2 ]

43 голосов
/ 30 ноября 2011

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

println u.name

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

println u.@name

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

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

6 голосов
/ 30 ноября 2011

Это означает, что вы получаете доступ к полю напрямую, а не через геттер.

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

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

...