抽象val而不是主构造函数参数

时间:2011-07-31 14:27:59

标签: scala scala-primary-constructor

考虑这两个类以及创建实例的方式:

class Person1(val name: String)

val p1 = new Person1("John");

abstract class Person2 {
  val name: String
}

val p2 = new Person2 {
  val name = "John"
}

为什么会选择后者(Person2)版本?每个这样的声明都会导致创建新的子类,而且代码稍微冗长且可读性较差,但是第二个习惯用法在Scala 中的 Programming 书中多次使用。直接领域有哪些优势?

1 个答案:

答案 0 :(得分:9)

一个简单的用例是traits,它不能有构造函数参数。