Scala Traits 的行为如何?
How Scala Traits behave?
为了更好地理解特性,我创建了这个 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) 行看起来不错。
这怎么可能?
尝试:
val myWriter = new Writer {}
我想它需要一个实现,即使那个实现是空的
是的,你是对的,一个特征不能在Scala.A中实例化。特征不能实例化,只能混入。你需要一个class来实例化,当你使用"new writer with Hdd", 它创建了一个匿名 class 因此你的实例化看起来很好并且没有给出任何 error.And 你在第二行得到错误因为它只是一个特征因此不能被实例化。
为了更好地理解特性,我创建了这个 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) 行看起来不错。
这怎么可能?
尝试:
val myWriter = new Writer {}
我想它需要一个实现,即使那个实现是空的
是的,你是对的,一个特征不能在Scala.A中实例化。特征不能实例化,只能混入。你需要一个class来实例化,当你使用"new writer with Hdd", 它创建了一个匿名 class 因此你的实例化看起来很好并且没有给出任何 error.And 你在第二行得到错误因为它只是一个特征因此不能被实例化。