【问题标题】:How to get trait's extended superclass/trait in Scala如何在Scala中获取特征的扩展超类/特征
【发布时间】:2019-05-11 18:48:09
【问题描述】:

我正在尝试回答“不耐烦的 Scala 第 2 版”一书中的练习题。问题是这样的:

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

我想到的第一印象是把BitSet的所有超类/特征放在一个List中。

为了递归获取给定类的超类,我设法在 sn-p 下面使用

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

但是,使用上面的 sn-p 不会像预期的那样给我一个类列表,而是如下:

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

那么,我的问题是如何获取给定特征的超类或特征?

【问题讨论】:

  • 我认为练习的想法不是制作程序,而是查看班级的documentation并开始“绘制”图表。跨度>

标签: scala generics inheritance traits


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多