scala - 来自类型参数的 WeakTypeOf
问题描述
我有一个带有函数的简单代码,它获取 weakTypeOf 案例类并返回它的字段,可以预见的是我们得到 2 个项目列表
def getMembers[T: WeakTypeTag] =
weakTypeOf[T].members.filterNot(_.isMethod).toList
final case class Person(name: String, age: Int) extends Models
val fields = getMembers[Person]
println(fields.length) // 2
它工作正常
但是,如果我想从我在创建子对象类时将 Person 作为类型参数传递的 trait 中获取成员怎么办?(WeakTypeTag 在构造过程中我无法传递给 trait)
trait ModelManager[CCT] {
def getMembers: List[String] = ???
}
case object PersonManager extends ModelManager[Person]
val fields = PersonManager.getMembers
println(fields.length)
有什么方法可以从 CCT 参数中获取 weakTypeOf 吗?
解决方案
尝试在方法中添加隐式参数
trait ModelManager[CCT] {
def getMembers(implicit weakTypeTag: WeakTypeTag[CCT]): List[Symbol] =
weakTypeTag.tpe.members.filterNot(_.isMethod).toList
}
或使特征成为抽象类
abstract class ModelManager[CCT: WeakTypeTag] {
def getMembers: List[Symbol] = weakTypeOf[CCT].members.filterNot(_.isMethod).toList
}
推荐阅读
- ios - 为什么我的应用显示名为 __FIRAPP_DEFAULT 的应用不存在
- c - 如何在 ebpf 中读取堆栈跟踪内核端?
- mysql - 在子进程中破解此 Sql 代码的指南
- javascript - 如何使用 babel 正确编译 react 模块,以及如何正确处理导入
- scala - Scala 子类的运行时表示的常见类型
- python-3.x - 将 tkinter 窗口内容转换为图像
- amazon-web-services - aws:EMR 集群在提交 Spark 作业时失败“错误用户数据:尝试获取用户数据时遇到错误”
- php - 如何使用 authy 在电子邮件中发送验证码而不是短信?
- macos - 如何在 mac 中使用 virtualenv 运行 jupyter
- python - 为什么 -7 在这个函数中返回 True?