我发现了一个有特征的有趣状况:
scala> trait Thing[A]
defined trait Thing
scala> val myThing: Thing[Int] = new Thing[Int]
error: trait Thing is abstract; cannot be instantiated
scala> val myThing: Thing[Int] = new Thing[Int] { }
myThing: Thing[Int] = $anon$1@135f160e
为什么具有代码块可让我创建Thing特质的实例?
这是称为匿名类的语言的功能。当您编写new Thing[Int] { }
时,编译器将创建一个名称为$anon$1
(或类似名称)的新类,该类扩展了Thing[Int]
,然后创建$anon$1
的新实例。