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
它允许您重写groovy对属性访问器的使用。如果你写:
println u.name
groovy将调用自动生成的getter Person.getName()。如果你写:
println u.@name
将直接转到字段,就像在Java中一样。在闭包的情况下,它似乎有一个first
字段,但没有相应的getFirst
访问器。
在groovy手册中,它被记录为直接字段访问操作符。
这意味着你直接访问一个字段,而不是通过getter。
请参阅Groovy操作符文档,尽管没有太多可说的。除了可能避免它。
对于ComposedClosure
失败的原因是因为没有first
(或second
)的getter。