2015-05-19 1 views
0

Итак, я пытаюсь реализовать версию для Builder pattern для Scala, и у меня возникают проблемы с моими возвращаемыми типами. Вот моя проблема:Scala: Возвращает тип объекта времени выполнения для шаблона построителя

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 возможно?

ответ

1

В принципе, вам просто нужно сказать, что Car.setFuelConsumption не возвращает только автомобиль, но вместо этого возвращает тип сам по себе, так как:

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

Спасибо! Более подробную информацию можно найти в [this] (http://stackoverflow.com/questions/4313139/how-to-use-scalas-this-typing-abstract-types-etc-to-implement-a-self-type) ответ – Bar

Смежные вопросы