讓我們考慮一個簡單的Groovy DSL使用 '所有者' 在Groovy DSL財產
execute {
sendNotification owner
sendNotification payee
}
執行的實施是
public static void execute(Closure dslCode) {
Closure clonedCode = dslCode.clone()
def dslDelegate = new MyDslDelegate(owner: 'IncCorp', payee: 'TheBoss')
clonedCode.delegate = dslDelegate
clonedCode.call()
}
和定製委託
public static class MyDslDelegate {
def owner
def payee
void sendNotification(to) {
println "Notification sent to $to"
}
}
預期的結果運行execute
區塊是
Notification sent to IncCorp
Notification sent to TheBoss
實際一個是
Notification sent to class package.OwnerClassName
Notification sent to TheBoss
的問題是owner
是在Groovy中Closure
本身保留財產,沒有resolveStrategy
選項有助於更換owner
值和自定義值從代表由於Groovy的getProperty
實施Closure
public Object getProperty(final String property) {
if ("delegate".equals(property)) {
return getDelegate();
} else if ("owner".equals(property)) {
return getOwner();
...
} else {
switch(resolveStrategy) {
case DELEGATE_FIRST:
...
}
我的問題是如何有人可以得出這個限制和使用自定義DSL中的10個屬性名稱?