1
在Swing和Wicket應用程序中,覆蓋框架提供的類中的方法是正常的。例如:如何將Scala中的可堆棧特性重寫?
val form = new Form("form") {
override def onSubmit() { println("Form was submitted") }
}
凡示例形式可以定義爲:
abstract class Form(id: String) {
def onSubmit()
def error(msg: String) { println(msg) }
}
許多形式實現需要的錯誤處理。爲此,我創建了一個可堆疊的特點:
trait FormErrorHandler extends Form {
abstract override def onSubmit() {
try super.onSubmit()
catch { case e: Exception => error("error during submit " + e.getMessage) }
}
}
如果我現在嘗試結合這一點,我得到編譯器錯誤:
val form = new Form("form") {
override def onSubmit() { println("Form was submitted") }
} with FormErrorHandler // DOES NOT COMPILE
我工作圍繞它:
class MyForm extends Form("form") {
override def onSubmit() { println("Form was submitted") }
}
val form = new MyForm with FormErrorHandler
,但它只是不會讀取;我必須命名一個通常是匿名的類。
任何建議,使這看起來不錯? 我試過的語法結構會對未來的Scala版本有意義嗎?
謝謝。該解決方法的缺點是它具有侵入性。知道框架的人(在這種情況下Wicket)會自動覆蓋onSubmit,而不是mySubmit。你也可以放棄堆疊性狀的「堆疊」部分。恕我直言,這些缺點是更糟的是給中間類名稱的解決方法。 – 2012-07-10 18:22:52
@ErikvanOosten - 以不同順序堆疊仍然堆疊。不過,我同意,爲了讓那些瞭解該框架的人保持更多的可讀性,使代碼不那麼漂亮,可能是更好的方法。 – 2012-07-10 18:28:23