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
}