【问题标题】:How do I use Scala reflection to find all subclasses of a trait (without using third-party tools)?如何使用 Scala 反射来查找特征的所有子类(不使用第三方工具)?
【发布时间】:2019-04-24 16:37:22
【问题描述】:

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

trait Result[+T] {

  def getValue: T

}

以及该特征的一个子类型,AnyValResult:

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

我希望能够向 Scala 的反射库询问 Result[_] 类型的所有子类型,并让它返回一个包含 AnyValResult 的集合。

我看到很多人问这个问题,他们似乎都说他们是使用第三方工具完成的。这是几年前的事了。除了对第三方工具进行逆向工程之外,有没有一种方法可以在最近版本的 Scala 中引入?如果我可以直接用反射来做的话,我宁愿不必在 Github 上引用一些随机项目。

【问题讨论】:

    标签: scala reflection


    【解决方案1】:

    子类可以在运行时动态加载/创建(如果特征未密封),因此通常不能直接使用 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?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      相关资源
      最近更新 更多