字段前的Groovy @符号

时间:2011-11-29 23:48:18

标签: reflection groovy private-members

在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 个答案:

答案 0 :(得分:43)

它允许您覆盖groovy对属性访问器的使用。如果你写:

println u.name

groovy将调用自动生成的getter Person.getName()。如果你写:

println u.@name

它会像在Java中一样直接进入字段。在闭包的情况下,它似乎有一个first字段,但没有相应的getFirst访问者。

在groovy手册中,它被记录为direct field access operator

答案 1 :(得分:6)

这意味着您直接访问某个字段,而不是通过getter。

请参阅Groovy operator docs,尽管没有更多话要说。除了可能避免它。

ComposedClosure失败的原因是因为first(或second)没有吸气剂。