假设我想Book
在 Scala 中表示 a,它是直接从 XML 生成的。我想要一个包装父类XMLObject
来包含可以直接映射到 XML 和从 XML 映射的类。
下面是一个工作实现的例子,但我想知道为什么构造函数不能是抽象的,你不能使用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)