gpt4 book ai didi

scala - 使用私有(private)构造函数参数扩展特征

转载 作者:行者123 更新时间:2023-12-04 15:53:34 25 4
gpt4 key购买 nike

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

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

class Child(private val name: String) extends Parent {
println("name is " + name)
}

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

class Child needs to be abstract, since method name in trait Parent of type ⇒ String is not defined.



当然,我可以:
  • 制作 Child类摘要,
  • 定义它而不使用构造函数中的私有(private),如 class Child(val name: String) .
  • 将父级设为 abstract class而不是特征

  • 但是通过上面的实现,我有没有办法 私有(private) 扩展特征时的构造函数参数?请注意,我希望变量是私有(private)的,这样我就不能执行 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
    }

    您将无法访问 child.name

    关于scala - 使用私有(private)构造函数参数扩展特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41901709/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com