我正在使用 Scala 2.10.1,我正在尝试定义一个方法,该方法将从对象中检索所有 val(包括继承的)。
我有以下内容:
import scala.reflect.runtime.{universe => ru}
object Reflection {
val mirror = ru.runtimeMirror(this.getClass.getClassLoader)
def findVals(x: Any): Iterable[String] = {
val theType = mirror.classSymbol(x.getClass).toType
theType.members.collect({case x if x.isTerm => x.asTerm}).filter(_.isVal).map(_.name.toString)
}
}
我正在测试这两个类:
class Base {
val x = 10
}
class Child extends Base {
val y = 20
}
调用以下代码时:
val x = new Child
val vs = Reflection.findVals(x)
println(vs)
结果是List(y)
出于某种原因,该isVal
方法返回与类中的字段false
对应的术语。x
Base
有人可以告诉我这里有什么问题吗?难道我做错了什么?