如何访问scala中的非公共字段和继承字段

时间:2017-07-06 08:17:02

标签: scala reflection

我有一段代码如下

object TestReflection {

  def main(args: Array[String]): Unit = {
    val cls = Class.forName("test.Child")
    cls.getDeclaredField("w")
    cls.getDeclaredField("x")
   cls.getDeclaredField("z")
  }
}

class Parent(val x : Int, val t : Int) {

}
class Child(x : Int, z : Int, val w : Int) extends Parent(x, 0) {

}

似乎cls.getDeclaredField(" x")和cls.getDeclaredField(" z")都不会兴奋。有人知道如何正确访问它们吗?

由于

1 个答案:

答案 0 :(得分:0)

Child中的x和z不是变量,它们是构造函数参数(即它们仅用于构造而不是构造对象的一部分),因此您无法访问它们。

你可以访问field = cls.getSuperclass.getDeclaredField(“x”),因为x在超类中定义为val,但这不是构造中的x,而是从父级继承的x。

要访问z,您需要将其分配给能够在构造中存活的内容。