给定以下类层次结构:
class A {
val x = 3
val y = 4
}
class B extends A {
val x = 4
}
Run Code Online (Sandbox Code Playgroud)
并说我有一个B实例,没有编译时的类层次结构知识,并希望能够报告如下内容:
Class: B
val[x]: 3
val[y]: 4
val[z]: 5
Run Code Online (Sandbox Code Playgroud)
使用scala反射的最佳方法是什么?
谢谢Des
J C*_*ell 14
简单来说:
import scala.reflect.runtime.universe._
val a = new A
val rm = scala.reflect.runtime.currentMirror
val accessors = rm.classSymbol(a.getClass).toType.members.collect {
case m: MethodSymbol if m.isGetter && m.isPublic => m
}
val instanceMirror = rm.reflect(a)
for(acc <- accessors)
println(s"$a: ${instanceMirror.reflectMethod(acc).apply()}")
Run Code Online (Sandbox Code Playgroud)