我在Scala中很陌生。有一个名为“ Document”的类,还有一些类,例如“ Doc1”和“ Doc2”,它们都是Document的子级。所以:
abstract class Document(id: Int, xmlString: String) {
// make some operations and create an instance of subtype
}
case class Doc1 extends Document {
// some subclass specific methods
}
case class Doc2 extends Document {
// some subclass specific methods
}
要运行Document构造函数,并由于传递的参数而有条件地创建Doc1或Doc2实例。我应该在“文档”类中添加一些辅助构造函数吗?
欢迎提出任何想法。
答案 0 :(得分:8)
最佳做法是使用companion object/singleton object:
abstract class Document { ... }
object Document {
def apply(docType: String) = {
if (docType == "doc1") {
Doc1()
} else {
Doc2()
}
}
}
及其用法:
val document1 = Document("doc1")
当然,这只是一个简单的示例-您可以将docType
更改为密封类,并通过模式匹配来检查类型。
apply
代替不同的函数名称,因此您将编写Document("doc1")
而不是Document.someFunctionName("doc1")