如何在Groovy中使用伪属性?

siotufzp  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(80)

来自文档:
按照惯例,Groovy将识别属性,即使没有支持字段,只要有遵循Java Bean规范的getter或setter。举例来说:

class PseudoProperties {
  void setName(String name) {}
  String getName() {} 
} 
def p = new PseudoProperties() 
p.name = 'Foo'

这种语法糖是许多用Groovy编写的DSL的核心。

我注意到,如果我们将伪属性声明为类方法,那么我们可以通过点person.name引用此属性。但我们不能不保存它的价值,而不是得到它。

public class Main {
    public static void main(String[] args) {
        def person = new Person();
        println "before: ${person.properties.get('name')}"
        person.name = "10"
        println "after: ${person.properties.get('name')}"
    }
}

class Person {
    void setName(String name) {}
    String getName() {return ""} //TODO ????
}

我不完全理解为什么需要这样的伪属性?所以你可以简单地通过一个点来调用这个方法?这些伪属性如何帮助在凹槽上创建DSL?

mu0hgdu0

mu0hgdu01#

如果你想存储一个名字,然后用getName获取它,你需要一个后台字段(而不是伪属性)。
所有伪属性都是这样的,如果你有一个方法,

String getWhoIsCool() { 
   "Tim" 
}

然后你可以用属性访问符号obj.whoIsCool来访问它(你不需要调用getter方法)

相关问题