如何将继承的变量从特征传递给辅助构造函数

我正在寻找值 bork 并将它传递给一个类到构造函数中的类中。

trait dog {
  lazy val bork = "bork"
}


class Animal(val firstName: String, dogCommand: DogCommand) extends dog{
  def this(firstName: String) {
    this(firstName, DogCommand(bork))
  }
  
  def getDogCommand(): Unit = {
    dogCommand.getCommand()
  }
}

case class DogCommand(command: String) {
  def getCommand() :Unit = {
      println(command)
  }
}

val myDog = new Animal("first")

myDog.getDogCommand()

我通常会得到 - 错误:未找到:值 bork

回答

问题是这bork是一个值,dog但没有dog可从中读取的实例borkthis是一个构造函数,因此它无法访问正在构造的值。

这是一种保留大部分原始代码的解决方案:

trait dog {
  def bork = dog.DefaultBork
}

object dog {
  val DefaultBork = "bork"
}

class Animal(val firstName: String, dogCommand: DogCommand) extends dog {
  def this(firstName: String) = this(firstName, DogCommand(dog.DefaultBork))

  ...
}

您可以考虑删除borkin的默认值,dog以便任何实现 trait 的类都需要为 提供值bork。(DefaultBork如果想保留默认值可以一直使用)


以上是如何将继承的变量从特征传递给辅助构造函数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>