Scala でa を表現したいとBook
します。これは XML から直接生成されます。XMLObject
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)