使用私有构造函数参数扩展特征

rga*_*ber 5 scala traits

在Scala中,如何使用特征中定义的私有构造函数参数在类中扩展特征?

trait Parent {
  protected def name: String
  require(name != "", "wooo problem!")
}

class Child(private val name: String) extends Parent {
  println("name is " + name)
}
Run Code Online (Sandbox Code Playgroud)

上面的类给出了一个错误:

class Child需要是抽象的,因为trait中的方法名称类型为⇒字符串的父类型未定义.

当然,我可以:

  1. 使Child类抽象,
  2. 定义它而不使用构造函数中的private class Child(val name: String).
  3. 让父母abstract class而不是特质

但是通过上面的实现,在扩展特性时我是否有办法获得私有构造函数参数?请注意,我希望变量是私有的,这样我就无法做到childInstance.name.

Sam*_*awi 2

尝试这个

  trait Parent {
    protected def name: String
    require(name != "", "wooo problem!")
  }

  class Child(override protected val name: String) extends Parent {
    val publicVar = "Hello World"
    println("name is " + name)
  }

  def main(args: Array[String]): Unit = {
    val child = new Child("John Doe")
    println(child.publicVar)
    println(child.name) // Does not compile
  }
Run Code Online (Sandbox Code Playgroud)

您将无法访问 child.name