Scala Reflect Case Class 应用方法运行时
Scala Reflect Case Class Apply Method Runtime
你如何在运行时间反映一个案例class的成员没有实例?
例如,如果我有以下情况class:
package com.abc
object Holder {
case class Hello(message:String,count:Int)
}
我想虽然我没有 Hello 的实例来反映我可以反映伴随对象应用方法并检查参数以了解它有哪些成员?
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)
然而这个returns"none"不是一个方法。所以它没有应用方法?
我得出以下结论。有什么方法可以使用 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))
你如何在运行时间反映一个案例class的成员没有实例?
例如,如果我有以下情况class:
package com.abc
object Holder {
case class Hello(message:String,count:Int)
}
我想虽然我没有 Hello 的实例来反映我可以反映伴随对象应用方法并检查参数以了解它有哪些成员?
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)
然而这个returns"none"不是一个方法。所以它没有应用方法?
我得出以下结论。有什么方法可以使用 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))