Scala reflection to access all public fields at runtime

前端 未结 3 1719
栀梦
栀梦 2021-01-04 11:23

Given the following class hierarchy:

class A {
  val x = 3
  val y = 4
}

class B extends A {
  val z = 5
}

And say I have an instance of B

3条回答
  •  青春惊慌失措
    2021-01-04 11:41

    In brief:

    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()}")
    

提交回复
热议问题