Как использовать отражение Scala для поиска всех подклассов признака (без использования сторонних инструментов)?

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

trait Result[+T] {

  def getValue: T

}

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

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

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

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


person Huitzilopochtli    schedule 24.04.2019    source источник


Ответы (1)


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

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

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

person Dmytro Mitin    schedule 24.04.2019