如何执行反射来查找扩展Scala中基类的所有类?

如何执行反射来查找扩展Scala中基类的所有类?,scala,Scala,我有一个DataObject类型的基类,它扩展了其他类。我想找到我的主类中的所有类,这样我就不必手动导入它们。我怎样才能做到这一点 当前实现(分别导入扩展DataObject的每个类): 理想实现的示例: ... def main(args: Array[String]): Unit = { val dataObjects: Array[DataObject] = <method to find all classes extended by DataObject>

我有一个DataObject类型的基类,它扩展了其他类。我想找到我的主类中的所有类,这样我就不必手动导入它们。我怎样才能做到这一点

当前实现(分别导入扩展DataObject的每个类):

理想实现的示例:

...
   def main(args: Array[String]): Unit = {
      val dataObjects: Array[DataObject] = <method to find all classes extended by DataObject>
      dataObjects.par.foreach(_.doSomething())
   }
...

根据您的回答,您需要的是:

import scala.collection.JavaConverters._

val reflections = new Reflections("my.package.dataobjects")
val dataObjects = asScalaSet(reflections.getSubTypesOf(classOf[Base])).map(_.newInstance())
这是一组可变的实例,若您想使其在mmutable中只是:

val immutableDataObjects = dataObjects.toSet

我认为那是不可能的。您将在什么范围内寻找这些类?在某个包裹里?在Scala中动态导入也是不可能的,所以我不相信有任何方法可以逐个导入它们。如果必须这样做,您可能需要设置某种预处理器。嗨@AndrewAllison,谢谢您回复我。。。它们实际上都位于DataObjects目录的子目录中。有没有办法清除目录中的所有类,并列出这些类的列表?请考虑使用.@你认为你可以详细说明我的更新吗?数组[DataObject]是DataObject实例的数组,框架提供给你扩展DataObject的类,而不是实例。你想做什么?嗨@GonzaloGuglielmo,为什么要把反射变成一个集合,如果它已经是一个集合的话?它是一个可变集合,在Scala中,我们通常使用不可变对象,toSet将可变集合变成不可变集合。
import scala.collection.JavaConverters._

val reflections = new Reflections("my.package.dataobjects")
val dataObjects = asScalaSet(reflections.getSubTypesOf(classOf[Base])).map(_.newInstance())
val immutableDataObjects = dataObjects.toSet