scala - 获取案例类参数和类型

标签 scala

希望能够检索案例类的参数名称和类型。我已经能够获得名称,但不能获得名称和类型。这是我所做的一次尝试,它基于 Stackoverflow 上的其他片段。注释掉的部分是我想做但不起作用的部分。

  def getMethods[T: TypeTag] = typeOf[T].members.collect {
    //case m: MethodSymbol if m.isCaseAccessor => (m, classOf[T].getDeclaredField(m).getType())
    case m: MethodSymbol if m.isCaseAccessor => m
  }.toList

  case class Person(name: String, age: Int)

  getMethods[Person]

删除评论并评论我得到的下面这行

<console>:13: error: class type required but T found
              case m: MethodSymbol if m.isCaseAccessor => (m, classOf[T].getDeclaredField(m).getType())

我正在寻找类似 List(("name", String), ("age", Int)) 或类似内容的内容。我想 scala 2.10 但 scala 2.11 也可以。

最佳答案

import scala.reflect.runtime.{universe => ru}
def getSymbols[T: ru.TypeTag]: List[ru.Symbol] = ru.typeOf[T].members.toList
case class Person(name: String, age: Int)



scala> getSymbols[Person].filter(!_.isMethod).map(x=>x.name->x.info)
res1: List[(reflect.runtime.universe.Symbol#NameType, reflect.runtime.universe.Type)] = List((age ,scala.Int), (name ,String))

关于scala - 获取案例类参数和类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38649293/

相关文章:

android - Scala 隐式动态转换

scala - 为什么我会收到Nullpointer异常

scala - 将 Scala 中的列表转换为格式化字符串

scala - 写入 Apache Spark 中的文件

scala - 使用 ReactiveMongo 和 Scala 更新插入许多记录

scala - 用提取程序替换案例类继承,保留Scala中的详尽性检查

java - 通过 Gradle 进行测试时的日志记录

scala - 如何使用 Spark Structured Streaming 将数据从 Kafka 主题流式传输到 Delta 表

scala - 用于 Scala 对象和特征的 Clojure 互操作

scala - Scala枚举和readResolve