繁体   English   中英

Scala:返回构建器模式的运行时对象类型

[英]Scala: Return run-time object type for builder pattern

因此,我正在尝试为Scala实现版本的Builder模式 ,而我的返回类型遇到了一些麻烦。 这是我的问题:

abstract class Car() {
  protected var fuelConsumption  = 10.0

  def setFuelConsumption(con: Double): Car = {
    fuelConsumption = con
    this
  }
}

trait HasHorn extends Car {
  protected var hornSound = "Toot!"

  def setHornSound(sound: String): HasHorn = {
    hornSound = sound
    this
  }

}

class ModelT extends Car with HasHorn

// I can do this:
val aCar = new ModelT().setHornSound("Beep!").setFuelConsumption(5.0)
// But not this, because setFuelConsumption returns a Car
val bCar = new ModelT().setFuelConsumption(12.0).setHornSound("Beep!")

所以我的问题是:我该如何返回对象的运行时类型,以便像bCar这样的声明成为可能?

基本上,您只需要说Car.setFuelConsumption不仅仅返回Car,而是返回自身的类型,如下所示:

def setFuelConsumption(con: Double): this.type = {
    fuelConsumption = con
    this
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM