字段前的 Groovy @ 符号

发布于 2024-12-19 04:56:35 字数 560 浏览 1 评论 0原文

Groovy 中字段名称前面的 @ 意味着什么?对于某些类,我能够访问无法直接访问的私有字段,让我们采取 CompositionClosure 例如:

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

What does @ means before a field name in Groovy? For some classes I am able to access private fields that are not directly accessible, let's take ComposedClosure for example:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜嗑 2024-12-26 04:56:35

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

println u.name

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

println u.@name

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

在 groovy 手册中,它被记录为直接字段访问运算符

It allows you to override groovy's use of property accessors. If you write:

println u.name

groovy will invoke the automatically generated getter Person.getName(). If you write:

println u.@name

it will go directly to the field like it would in Java. In the case of the closure, it seems to have a first field but not a corresponding getFirst accessor.

In the groovy manual, it's documented as the direct field access operator.

对你而言 2024-12-26 04:56:35

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

请参阅 Groovy 运算符文档,尽管没有更多可说的。除了可能避免它之外。

ComposeClosure 失败的原因是 first (或 second)没有 getter。

It means you're accessing a field directly, rather than going through a getter.

See the Groovy operator docs, although there isn't much more to say. Other than probably avoid it.

The reason it fails for a ComposedClosure is because there's no getter for first (or second).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文