Groovy @ símbolo antes de los campos


¿Qué significa @ antes de un nombre de campo en Groovy? Para algunas clases puedo acceder a campos privados que no son directamente accesibles, tomemos ComposedClosure por ejemplo:

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
Author: Nutel, 2011-11-30

2 answers

Le permite anular el uso de groovy de los accesores de propiedad. Si escribes:

println u.name

Groovy invocará al getter Person generado automáticamente.getName (). Si escribes:

println u.@name

Irá directamente al campo como lo haría en Java. En el caso del cierre, parece tener un campo first pero no un accessor getFirst correspondiente.

En el manual de groovy, está documentado como el operador de acceso directo a campo.

 43
Author: ataylor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-23 21:01:53

Significa que estás accediendo a un campo directamente, en lugar de pasar por un getter.

Ver el operador Groovy docs, aunque no hay mucho más que decir. Aparte de probablemente evitarlo.

La razón por la que falla para un ComposedClosure es porque no hay un captador para first (o second).

 6
Author: Dave Newton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-30 00:05:16