Swing および Wicket アプリケーションでは、フレームワークによって提供されるクラスのメソッドをオーバーライドするのが普通です。例えば:
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 バージョンで意味を成すでしょうか?