Scala Traits的表现如何?

时间:2016-09-27 12:09:42

标签: scala traits

我创建了这个小Scala示例,以了解更好的特征。

trait Writer {
  def write(value: Int): Unit = {
    print("Writer")
  }
}

trait Hdd extends Writer {
  override def write(value: Int): Unit = {
    print("Hdd")
  }
}

trait File extends Writer {
  override def write(value: Int): Unit = {
    print("File")
  }
}

class TestClass extends App {
  (1)   val myWriter = new Writer with Hdd   // This line looks fine
  (2)   val myNewWriter = new Writer         // This line fail
}

根据我的理解,无法实例化Trait,因此第(2)行失败。

但由于某些我无法理解的原因,第(1)行看起来不错。

这怎么可能?

2 个答案:

答案 0 :(得分:6)

是的,你是正确的,在Scala中无法实例化特征。特征无法实例化,只能混入。你需要一个实例化的类,当你使用"新编写器与Hdd"时,它创建了一个匿名类,因此你的实例化看起来很好并且不会给出任何错误。你得到第二行的错误,因为它只是一个特征,因此无法实例化。

答案 1 :(得分:1)

尝试:

val myWriter = new Writer {}

我想它需要一个实现,即使该实现是空的