Есть ли способ, которым я могу "перебрать" набор классов из указанного пакета в Scala?
Вариант использования - управление набором сервисов, унаследованных от признака BaseService, которые открываются по предоставленному имени в REST API. Класс Manager должен быть в состоянии предоставить список служб, а также проверить, существует ли предоставленная служба, и, если это так, создать экземпляр для выполнения перегруженной функции.
Моя мысль похожа на псевдокод:
for ( clazz <- com.demo.pkg ) {
val service = Class.forName(clazz).newInstance
registerService( service )
}
Вместо того, чтобы создавать экземпляры, статические методы для одноименного объекта для предоставления имени и описания службы могут быть лучше.
В Python это тривиально из-за dir (), а в PHP довольно просто из-за функций загрузчика классов, но я новичок в Scala.
Кроме того, я понимаю, что, возможно, я неправильно подхожу к этому вопросу и хотел бы получить обратную связь.
Обновление:
Я принял ответ JPP ниже, но он прав, это слишком дорогой процесс для обычной операции. Поэтому мне нужно изменить свой подход. Вместо этого класс менеджера будет поддерживать статический список предложений службы. Хотя это и не идеально с точки зрения разработки, выигрыш в скорости выполнения, похоже, того стоит.