Как использовать отражение Scala, чтобы найти все подклассы черты (без использования сторонних инструментов)? - PullRequest
0 голосов
/ 24 апреля 2019

Предположим, у меня есть тип, Результат:

trait Result[+T] {

  def getValue: T

}

и подтип этой черты, AnyValResult:

class AnyValResult(value: AnyVal) extends Result[AnyVal] {
  override def getValue: AnyVal = value
}

Я хочу иметь возможность запросить библиотеку отражений Scala для всехподтипы типа Result [_] и возвращают коллекцию, включающую AnyValResult.

Я видел, что многие люди задают этот вопрос, и все они, кажется, говорят, что они сделали это с помощью стороннихинструменты.Это было несколько лет назад.Если не считать реинжиниринга сторонних инструментов, есть ли способ сделать это, который был представлен в более поздних версиях Scala?Я бы предпочел не ссылаться на какой-нибудь случайный проект на Github, если я могу сделать это напрямую с помощью отражения.

1 Ответ

0 голосов
/ 24 апреля 2019

Подклассы могут быть загружены / созданы динамически во время выполнения (если черта не запечатана), поэтому обычно это нельзя сделать напрямую с помощью отражения Java или Scala. Вопрос не в том, насколько свежа версия Scala, а в том, как работает JVM. Двигатель должен загрузить каждый класс и проверить, расширяет ли класс эту черту.

Как найти все подклассы данного класса в Java?

Можно ли получить все подклассы класса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...