Как получить расширенный суперкласс / черту в Scala - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь ответить на практический вопрос из Книги "Scala для нетерпеливых 2-е издание".Вопрос такой:

Посмотрите на класс 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 голосов
/ 11 декабря 2018

Черты Scala соответствуют интерфейсам Java.Таким образом, чтобы получить их, вам нужен метод getInterfaces.В терминах Scala он возвращает Array[Class[_]], который неявно преобразуется в Seq, и вы можете вызвать toList.

...