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