如何使用Scala反射查找特征的所有子类(不使用第三方工具)?

时间:2019-04-24 16:37:22

标签: scala reflection

假设我有一个类型,结果:

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 :(得分:0)

子类可以在运行时动态加载/创建(如果特征未密封),因此通常不能直接使用Java或Scala反射来完成。这不是Scala的最新版本是什么,这就是JVM的工作方式。引擎应加载每个类,并检查该类是否扩展了特征。

How do you find all subclasses of a given class in Java?

Is it possible to get all the subclasses of a class?