在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
答案 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
)没有吸气剂。