我在现有项目中找到了代码,但我不知道它为什么能工作。类有一个名称以“is”开头的方法。我可以调用foo.isBar(),它只是做它的工作。但在提到的代码中,我看到使用简单的foo.bar,它似乎也能工作。但我不明白为什么。我在在线Groovy编译器中测试过它,它仍然工作。所以它不是特定于项目,它是Groovy语言的某个特性吗?
class Foo {
boolean isBar() {
return false
}
}
Foo foo = new Foo()
//this one works
println foo.isBar()
//but why this one also works?
println foo.bar
谷歌搜索没有帮助,我甚至不知道我到底要找什么。
1条答案
按热度按时间dgenwo3n1#
Groove的属性功能引入了特殊的命名约定(大多遵循Java Beans specification)。
属性可以在没有后台字段的情况下定义:
按照惯例,如果存在遵循JavaBeans规范的getter或setter,即使没有支持字段,Groovy也会识别属性。
示例:
通常建议属性名的前两个字母小写,对于多单词属性,建议使用驼峰式大小写。在这种情况下,生成的getter和setter的名称将通过大写属性名并添加get或set前缀来形成(或者可选地对于布尔getter为"is")。getLength是length属性的getter,setFirstName是firstName属性的setter。isEmpty可能是名为empty的属性的getter方法名。
您可以在文档中阅读有关命名约定的详细信息