Scala动态访问类中的字段

时间:2015-11-27 13:06:13

标签: scala reflection

考虑一个有很多值的类

class Test {
    val a1 = "test1"
    val a2 = "test2"
    ..
    ..
    val a25 = "test25"
}

可以编写这样的函数来访问第n个变量。

def getVar(n: Int, test: Test) = {
    test.("test"+n) //something like this to access the nth variable
}

我知道这可以通过集合完成,但我的问题是可以完成这种类型的反射。

2 个答案:

答案 0 :(得分:5)

val field = test.getClass.getDeclaredFields.apply(n)
field.setAccessible(true)
field.get(test)

答案 1 :(得分:1)

使用动态

import scala.Dynamic
import scala.language.dynamics

object Test extends Dynamic {
  val a1 = "test1"
  val a2 = "test2"
  val a3 = "test3"
  val list = List(a1, a2, a3)

  def selectDynamic(s: String) = {
    list(s.replace("test", "").toInt-1)
  }
}

assert(Test.list(1) == Test.test2)