假設我想在Scala中表示Book
,並且它是直接從XML生成的。 我想要一個包裝父類XMLObject
包含可以直接映射到XML和從XML映射的類。在Scala中重寫和繼承的次級構造函數
下面是這個工作實施的例子,但我想知道爲什麼構造函數不能是抽象的,你不能使用override
關鍵字,但你仍然可以重新定義構造函數具有相同簽名爲父類在子類中,並且按照您期望的方式工作。
這是否被認爲是「不好」的編碼實踐,如果是這樣,那麼獲得類似功能的更好方法是什麼?
abstract class XMLObject {
def toXML:Node
def this(xml:Node) = this()
}
class Book(
val author:String = "",
val title:String = "",
val genre:String = "",
val price:Double = 0,
val publishDate:Date = null,
val description:String = "",
val id:Int = 0
) extends XMLObject {
override def toXML:Node =
<book id="{id}">
...
</book>
def this(xml:Node) = {
this(
author = (xml \ "author").text,
title = (xml \ "title").text,
genre = (xml \ "genre").text,
price = (xml \ "price").text.toDouble,
publishDate = (new SimpleDateFormat("yyyy-MM-dd")).parse((xml \ "publish_date").text),
description = (xml \ "description").text
)
}
}
使用例:
val book = new Book(someXMLNode)