在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中的方法名称类型为⇒字符串的父类型未定义.
当然,我可以:
Child类抽象,class Child(val name: String).abstract class而不是特质但是通过上面的实现,在扩展特性时我是否有办法获得私有构造函数参数?请注意,我希望变量是私有的,这样我就无法做到childInstance.name.
尝试这个
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
| 归档时间: |
|
| 查看次数: |
639 次 |
| 最近记录: |