如何使用scala 2.10中的新反射模型从scala中的案例类提取字段值?
例如,使用以下内容不会提取字段方法
def getMethods[T:TypeTag](t:T) = typeOf[T].members.collect {
case m:MethodSymbol => m
}
我打算把它们抽进去
for {field <- fields} {
currentMirror.reflect(caseClass).reflectField(field).get
}
最佳答案
MethodSymbol
具有isCaseAccessor
方法,可让您精确地执行此操作:
def getMethods[T: TypeTag] = typeOf[T].members.collect {
case m: MethodSymbol if m.isCaseAccessor => m
}.toList
现在您可以编写以下内容:
scala> case class Person(name: String, age: Int)
defined class Person
scala> getMethods[Person]
res1: List[reflect.runtime.universe.MethodSymbol] = List(value age, value name)
而且,您仅获得所需的方法符号。
如果您只想要实际的字段名称(而不是
value
前缀),并且希望它们以相同的顺序,则:def getMethods[T: TypeTag]: List[String] =
typeOf[T].members.sorted.collect {
case m: MethodSymbol if m.isCaseAccessor => m.name.toString
}
关于scala - Scala 2.10反射,如何从案例类中提取字段值,即案例类中的字段列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16079113/