我正在尝试回答《 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)
所以,我的问题是如何为给定特征获取超类或特征?
答案 0 :(得分:0)
Scala特性对应于Java接口。因此,要获取它们,您需要getInterfaces
方法。用Scala术语,它将返回一个Array[Class[_]]
,它将隐式转换为Seq
,您可以在其上调用toList
。