来自文档:
按照惯例,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?
1条答案
按热度按时间mu0hgdu01#
如果你想存储一个名字,然后用
getName
获取它,你需要一个后台字段(而不是伪属性)。所有伪属性都是这样的,如果你有一个方法,
然后你可以用属性访问符号
obj.whoIsCool
来访问它(你不需要调用getter方法)