Groovy中。'@ value'和。@值之间的区别

时间:2013-06-20 07:56:58

标签: groovy

我看到以不同方式访问的属性为。'@ value'和。@ value。有什么不同?

这里究竟引用了什么?

1 个答案:

答案 0 :(得分:3)

你在哪里见过o.'@value'

调用o.@value会忽略对象中的getter并直接获取value属性。

因此调用o.'@value'将获得一个名为@value的属性(在Groovy中,该属性不是类的有效属性名称)

从示例编辑

啊,对,这是一个解释不清的例子。当啜饮xml时,@attr表单是一种特殊形式,它将访问节点的属性。

现在groovy允许你执行以下操作:

def a = [ 'a', 'b', 'c' ]

// Will call getBytes() on every string in the list
assert a*.bytes == [[97], [98], [99]]

// So will this!
assert a.bytes == [[97], [98], [99]]

正如您在第二个assert中看到的那样,我们没有扩展点运算符*.,但它仍然有效,并在列表中的每个元素上调用getBytes。 / p>

在您链接到the xml example时,它正在执行:

records.car.findAll{ it.country.text() =~ '.*s.*a.*' }.'@make'

所以它在列表中的每个项目上调用'make'属性。如果没有引号:

records.car.findAll{ it.country.text() =~ '.*s.*a.*' }.@make

它会尝试获取ArrayList的make属性(显然不存在)。

我想说一个不那么混乱的写作方式是:

records.car.findAll{ it.country.text() =~ '.*s.*a.*' }*.@make

因为这使得事情变得更加明显......