使用Groovy DSL委托getter覆盖现有属性
在下面的示例中,我想用我自己的委托逻辑覆盖所有属性。但我只能对不存在的属性这样做,编译时已知的属性保持不变 有可能全部处理吗使用Groovy DSL委托getter覆盖现有属性,groovy,dsl,Groovy,Dsl,在下面的示例中,我想用我自己的委托逻辑覆盖所有属性。但我只能对不存在的属性这样做,编译时已知的属性保持不变 有可能全部处理吗 def dsl(Closure action) { action.delegate = new Object() { Object getProperty(String name) { println "overriding property [$name] => Ross" return "R
def dsl(Closure action) {
action.delegate = new Object() {
Object getProperty(String name) {
println "overriding property [$name] => Ross"
return "Ross"
}
}
action()
}
dsl {
def existingSymbol = "Joe"
println "existingSymbol: $existingSymbol"
println "inexistentSymbol: $inexistentSymbol"
}
输出:
existingSymbol: Joe <--- expecting "Ross" here
overriding property [inexistentSymbol] => Ross
inexistentSymbol: Ross
现有符号:乔·罗斯
不存在符号:罗斯
def existingSymbol=“Joe”中的问题
通过使用def
可以声明具有最大优先级的新局部变量
检查以下代码:
def dsl(Closure action) {
def delegate = new Object() {
Object getProperty(String name) {
return "Ross"
}
}
action=action.rehydrate(delegate,delegate,delegate)
action.call()
}
dsl {
def existingSymbol = "Joe"
println "1 existingSymbol: ${existingSymbol}"
println "2 existingSymbol: ${this.existingSymbol}"
}
dsl {
existingSymbol = "Joe"
println "3 existingSymbol: ${existingSymbol}"
println "4 existingSymbol: ${this.existingSymbol}"
}
输出:
1 existingSymbol: Joe
2 existingSymbol: Ross
3 existingSymbol: Ross
4 existingSymbol: Ross
def existingSymbol=“Joe”中的问题
通过使用def
可以声明具有最大优先级的新局部变量
检查以下代码:
def dsl(Closure action) {
def delegate = new Object() {
Object getProperty(String name) {
return "Ross"
}
}
action=action.rehydrate(delegate,delegate,delegate)
action.call()
}
dsl {
def existingSymbol = "Joe"
println "1 existingSymbol: ${existingSymbol}"
println "2 existingSymbol: ${this.existingSymbol}"
}
dsl {
existingSymbol = "Joe"
println "3 existingSymbol: ${existingSymbol}"
println "4 existingSymbol: ${this.existingSymbol}"
}
输出:
1 existingSymbol: Joe
2 existingSymbol: Ross
3 existingSymbol: Ross
4 existingSymbol: Ross