Как да използвам отражението на 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