Groovy @ symbol before fields

groovy, private-members, reflection

Solution

It allows you to override groovy's use of property accessors. If you write:

println u.name

groovy will invoke the automatically generated getter Person.getName(). If you write:

println u.@name

it will go directly to the field like it would in Java. In the case of the closure, it seems to have a `first` field but not a corresponding `getFirst` accessor.

In the groovy manual, it's documented as the direct field access operator.

Problem

What does @ means before a field name in Groovy? For some classes I am able to access private fields that are not directly accessible, let's take ComposedClosure for example: ``` 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 ```

Original source