【发布时间】:2016-07-04 11:45:22
【问题描述】:
我正在寻找一种最简洁的方式,让用户无需重复自己就可以选择方法的实现。在下面的情况下,每个子类将 XML 中的问候语与来自特定类的参数放在一起。因此方法toXML 在特征中被声明为抽象的。但是,我想要检查是否在类的构造中传入了 _generalMessage,如果是,则使用所有 Greeting 实现通用的通用 XML 问候语,例如<Message>_generalMessage</Message>。我知道我可以在Greeting 的每个实现中对_generalMessage 的存在进行模式匹配,但我很好奇是否有更优雅的方式。
trait Greeting {
protected var foo = //...
protected var _generalMessage: Option[Srting] = None
//...
//public API
def generalMessage: String = _generalMessage match {case Some(x) => x; case None =>""
def generalMessage_=(s: String) {_generalMessage = Some(s)}
protected def toXML: scala.xml.Node
}
class specificGreeting1 extends Greeting {
// class implementation
def toXML: scala.xml.Node = <//a detailed XML with values from class specificGreeting1>
}
// multiple other specificGreeting classes
【问题讨论】:
标签: scala