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

时间:2018-12-10 20:13:23

标签: scala generics inheritance traits

我正在尝试回答《 Scala for Im耐心第二版》一书中的练习题。问题是这样的:

  

查看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)

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

1 个答案:

答案 0 :(得分:0)

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