使用特定实现进行实例化的Scala语法是什么?

时间:2011-09-13 12:27:16

标签: scala

假设我有以下特征

trait Market {
  def getCurrency: String
}

使用以下实现

class MarketImpl extends Market {
  override def getCurrency = "USD"
}

我有另一个抽象类如下

abstract class TraitTest extends Market  {
}

使用MarketImpl实现实例化TraitTest的语法是什么?概念上类似于以下

new TraitTest with MarketImpl

虽然上述说法不起作用,因为MarketImpl不是特质

3 个答案:

答案 0 :(得分:4)

TraitTestMarketImpl都是类。 Scala无法从多个类继承。你应该重构你的代码,例如使TraitTest成为一种特质。然后你可以写new MarketImpl with TraitTest

答案 1 :(得分:2)

您已经达到了Scala(和Java)的单一类继承限制。您可以使用实例组合/聚合来修复它(与使用Java的方式相同):

abstract class TraitTest extends Market {
    def getCurrency = market.getCurrency
    val market: Market
}

然后你实例化:

val myTraitTest = new TraitTest {
                    val market = new MarketImpl
                  }

scala> myTraitTest.getCurrency
res1: String = USD

答案 2 :(得分:0)

如果您计划将MarketImpl与其他类一起实例化,请trait为{{1}}。