Scala反映案例类应用方法运行时

时间:2017-06-29 12:58:15

标签: scala reflection runtime

如何在没有实例的情况下在运行时反映案例类的成员?

例如,如果我有以下案例类:

package com.abc

object Holder {
  case class Hello(message:String,count:Int)
}

我会想,虽然我没有Hello的实例来反映我可以反映Companion Object apply方法并检查参数以了解它有哪些成员?

val mirror = ru.runtimeMirror(getClass.getClassLoader)
val module = mirror.staticModule("com.abc.Holder$Hello")
val instance = mirror.reflectModule(module).symbol.typeSignature.member(TermName("apply")).asMethod.paramLists
instance.foreach(println)

然而,返回“none”不是方法。所以它没有应用方法?

1 个答案:

答案 0 :(得分:0)

我得出了以下结论。有没有办法使用Scala反射而不是Class.forName?

val mirror = ru.runtimeMirror(getClass.getClassLoader)
val classSymbol = mirror.classSymbol(Class.forName("com.quantexa.anonymizer.FiuModel$Customer"))
val classApply = classSymbol.companion.typeSignature.member(TermName("apply")).asMethod

val members = classApply.paramLists.flatten.map(x => (x.asTerm.name,x.typeSignature))