我想要一个概念上包含三个信息的对象类型:
同样重要的是,这个对象类型应该是保存文本文档内容的基础 - 通过拥有可迭代的实例。
我目前正在实现这个作为一个类层次结构,其中有一个包含1和2的第一个类,然后是两个继承它的类,一个叫做“word”,另一个叫做“标点符号”,如下所示:
abstract class TextElement(initContent: String, initStyleMap: Map[String, String]) {
val content : String = initContent
val styleMap: Map[String, String] = initStyleMap
}
case class Word(initContent: String, initStyleMap: Map[String, String]) extends TextElement(initContent: String, initStyleMap: Map[String, String]) {
}
case class Punctuation(initContent: String, initStyleMap: Map[String, String]) extends TextElement(initContent: String, initStyleMap: Map[String, String]) {
}
我想知道是否还有比我刚才描述的第一个直觉更适合的东西,因为在Scala中可能有更精简或更清洁的方式。
值得注意的是,我将拥有数千个这些对象的实例,因此内存占用非常重要,并且可以快速访问数据。我天真的实现感觉有点样板,而且,也许还有其他方法我忽略了。
所以我想知道是否有一种可行的不同方法,而不是直观的方法,这可能有任何好处。 此外,上述代码是否可以更加优雅/简洁。
答案 0 :(得分:4)
您可以使用trait
而不是抽象类来减少代码:
sealed trait TextElement {
def content: String
def styleMap: Map[String, String]
}
case class Word(content: String, styleMap: Map[String, String]) extends TextElement
case class Punctuation(content: String, styleMap: Map[String, String]) extends TextElement
sealed
keyword允许编译器检查匹配是否详尽。