我有一個mixin類,它爲不共享共同遺產的不同類型的功能捆綁在一起。混合是使用@Mixin註釋應用的,因此它在編譯時處理。Groovy中'return this'的類型@Mixin
作爲方法調用的結果,一些mixin方法返回這個。問題是這個是混合類型,而不是基類的類型。當我想要在應用程序的其餘部分中鍵入工作時拋出一個ClassCastException異常,說混合類型不能轉換爲基類型。
在下面的示例代碼中,return this
返回類型爲AMixin的對象而不是類型爲BaseClass的對象。
我該如何讓return this
返回一個BaseClass類型的對象而不是AMixin類型的對象?
class AMixin {
def getWhatIWant(){
if(isWhatIwant){
return this
} else {
getChildWhatIWant()
}
}
def getChildWhatIWant(){
for (def child in childred) {
def whatIWant = child.getWhatIWant()
if (whatIWant) {
return whatIWant
}
}
return null
}
}
@Mixin(AMixin)
class BaseClass {
boolean isWhatiWant
List<baseClass> children
}
此解決方案有效,謝謝。由於我的Mixin必須被初始化,所以我選擇用這個方法調用這個方法init(this),所以我可以通過這種方式將「真實的」這個傳遞給Mixin - 對我來說似乎更加清潔。但是,兩種解決方法都有不對的地方,它們不應該是必需的。 – Ice09
這種方法解決了我的問題,但是Ice09已經說過這種解決方法並不合適。 – Ruben