在 Swing 和 Wicket 应用程序中,覆盖框架提供的类中的方法是正常的。例如:
val form = new Form("form") {
override def onSubmit() { println("Form was submitted") }
}
示例 Form 可以定义为:
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 版本有意义吗?