scala - 如何使用 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 上引用一些随机项目。
解决方案
子类可以在运行时动态加载/创建(如果特征未密封),因此通常不能直接使用 Java 或 Scala 反射来完成。这不是 Scala 版本有多新的问题,而是 JVM 的工作方式。您应该加载每个类并检查该类是否扩展了特征。
推荐阅读
- react-native - React Native - 当redux状态改变时屏幕不会重新渲染
- java - Spring Cloud Gateway:如何配置到 Consul UI 的路由?
- android - 锁定屏幕上的 BiometricPrompt 对话框
- objective-c - 在 macOS 上从其代码对象获取进程所有者
- ios - 如何在 SwiftUI 中获取视图或屏幕的高度和宽度
- python - 错误:使用 Python 将 Json 插入 Postgresql 时
- python - 我可以像在 R 中一样在 python 中运行行吗?
- r - 如何在 R 中执行测试的现场显着性
- r - 用 R 中另一列的值替换某列中的非 NA 值
- python-3.x - 文本变量在 tkinter 中无意中捆绑在一起