不能在没有空代码块的情况下实例化没有方法的特征

Rob*_*Rob 2 scala traits anonymous-class

我发现了一个具有特征的有趣条件:

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
Run Code Online (Sandbox Code Playgroud)

为什么代码块允许我创建 Thing trait 的实例?

Mic*_*jac 6

这是该语言的一个特性,称为匿名类。当您编写 时new Thing[Int] { },编译器会创建一个名称$anon$1(或类似名称)的新类extends Thing[Int],然后创建 的新实例$anon$1