剥离动词和删除括号的Groovy速记名称访问

时间:2017-02-09 00:09:08

标签: groovy

在Groovy文档中,它提到了仅通过名称访问属性的简写表示法,例如,obj.getFoo()等同于obj.fooobj.setFoo(val)等同于{{1 }}。看起来这也适用于以“is”为前缀的方法。例如,对于obj.foo = val对象,您可以执行File而不是obj.isFile(),并且它在语义上是相同的。这种速记符号是否可以删除动词并且没有括号,是否适用于任何其他类型的Groovy方法?

2 个答案:

答案 0 :(得分:1)

我不会想到删除动词和括号。它更像是您直接访问该属性,就像在Ruby和Python等语言中一样。这只是Groovy方便,与Java不同。语言中有很多类似的便利,例如默认运算符重载集合(如“<<”和+)和“集合展开”使用*。

答案 1 :(得分:1)

所以它真的不像直接访问属性或剥离动词。这是语法糖。

在Groovy中:

println bob.name

在Java中等效于:

System.out.println(bob.getName());

在Groovy中:

bob.name = "Bob"

在Java中等效于:

bob.setName("Bob");

此外,在Groovy中,提供的默认实现没有任何代码。因此,您可以在Java中生成默认的getter和setter,Groovy默认将这些编译到您的类中。

您可以通过提供自己的getter和setter来覆盖它们,这样您就不会直接访问该属性。

Groovy语言网站上有大量信息。这里只是解释这个问题的地方,尽管可以通过Groovy语言网站找到更多细节。

http://groovy-lang.org/style-guide.html