如何在 Scala 中获得 trait 的扩展超类/trait



我正试图回答《不耐烦的Scala第二版》一书中的练习问题。问题是这样的:

查看BitSet类,并绘制其所有超类和特性的图。忽略类型参数([…]中的所有内容(。然后给出特征的线性化。

我想到的第一印象是在列表中获取BitSet的所有超类/特征。

为了递归地获得给定类的超类,我正在设法使用下面的片段

def recurGetSupers(cls: Class[_]): List[Class[_]] = {
cls :: Option(cls.getSuperclass).map(recurGetSupers).getOrElse(Nil)
}

然而,使用上面的代码片段不会像预期的那样给我一个类的列表,而是下面的:

scala> recurGetSupers(classOf[scala.collection.BitSet])
res0: List[Class[_]] = List(interface scala.collection.BitSet)

所以,我的问题是,如何为给定的特质获得超类或特质?

Scala特性对应于Java接口。所以要得到它们,你需要getInterfaces方法。在Scala术语中,它返回一个Array[Class[_]],它将被隐式转换为Seq,您可以在它上调用toList

最新更新