Groovy -以“is”开头的方法

umuewwlo  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(144)

我在现有项目中找到了代码,但我不知道它为什么能工作。类有一个名称以“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

谷歌搜索没有帮助,我甚至不知道我到底要找什么。

dgenwo3n

dgenwo3n1#

Groove的属性功能引入了特殊的命名约定(大多遵循Java Beans specification)。
属性可以在没有后台字段的情况下定义:
按照惯例,如果存在遵循JavaBeans规范的getter或setter,即使没有支持字段,Groovy也会识别属性。
示例:

class PseudoProperties {
    // a pseudo property "name"
    void setName(String name) {}
    String getName() {}

    // a pseudo read-only property "age"
    int getAge() { 42 }

    // a pseudo write-only property "groovy"
    void setGroovy(boolean groovy) {  }
}
def p = new PseudoProperties()
p.name = 'Foo'                      
assert p.age == 42                  
p.groovy = true

通常建议属性名的前两个字母小写,对于多单词属性,建议使用驼峰式大小写。在这种情况下,生成的getter和setter的名称将通过大写属性名并添加get或set前缀来形成(或者可选地对于布尔getter为"is")。getLength是length属性的getter,setFirstName是firstName属性的setter。isEmpty可能是名为empty的属性的getter方法名。
您可以在文档中阅读有关命名约定的详细信息

相关问题