1
我嘗試攔截DSL對象的某些setter調用,以便在使用不推薦使用的屬性時可以打印警告。如何在Groovy中一般地包裝一個setter?
爲了避免每個棄用屬性創建自定義的制定者,我想一般的東西,如取代那些制定者:
void setFoo(value) {
println "foo is deprecated"
actualSetFoo(value)
}
我曾嘗試在網上能找到很多解決方案,但無論是電話沒被攔截,有一個StackOverflow,因爲我遞歸調用攔截器或實際的setter找不到。
我的最新解決方案如下:
String setterName = 'set' + propertyName.capitalize()
// returns ExpandoMetaProperty
def original = extension.metaClass."$setterName"
extension.metaClass."$setterName" << { arg ->
println "property '$propertyName' has been deprecated"
original.setProperty(propertyName, arg)
}
但是,一個拋出groovy.lang.GroovyRuntimeException: Cannot get the value of write-only property '$property' on $class
每個讀取權限。