Search code examples
reflectiongroovyprivate-members

Groovy @ symbol before fields


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

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.