字段前的@符号



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。

相关内容

  • 没有找到相关文章

最新更新