在没有空代码块的情况下,没有方法就无法实例化特征

问题描述 投票:0回答:1

我发现了一个有特征的有趣状况:

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特质的实例?

scala traits
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.