来自类型参数的 WeakTypeOf
WeakTypeOf from type parameter
我有一个简单的代码,其函数获取 weakTypeOf case class 和 returns 它的字段,可以预见我们得到 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 作为类型参数传递的特征获取成员怎么办 class? (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
}
或者将特征抽象化class
abstract class ModelManager[CCT: WeakTypeTag] {
def getMembers: List[Symbol] = weakTypeOf[CCT].members.filterNot(_.isMethod).toList
}
我有一个简单的代码,其函数获取 weakTypeOf case class 和 returns 它的字段,可以预见我们得到 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 作为类型参数传递的特征获取成员怎么办 class? (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
}
或者将特征抽象化class
abstract class ModelManager[CCT: WeakTypeTag] {
def getMembers: List[Symbol] = weakTypeOf[CCT].members.filterNot(_.isMethod).toList
}