我创建了这个小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)行看起来不错。
这怎么可能?
答案 0 :(得分:6)
是的,你是正确的,在Scala中无法实例化特征。特征无法实例化,只能混入。你需要一个实例化的类,当你使用"新编写器与Hdd"时,它创建了一个匿名类,因此你的实例化看起来很好并且不会给出任何错误。你得到第二行的错误,因为它只是一个特征,因此无法实例化。
答案 1 :(得分:1)
尝试:
val myWriter = new Writer {}
我想它需要一个实现,即使该实现是空的