1. 背景
scala有如下的case class
case class RiskDetaineeTrend(var recId:Long=0L,
var day0613:Double = 0.0,
var day0614:Double = 0.0
)
今天的日期是6月13号,所以需要设置day0613成员变量的值。等明天再设置day0614成员变量的值。所以需要在代码中动态的选择成员变量进行值的设置,就需要用到反射
2. 反射的使用
import scala.reflect.runtime.universe.{TermName, runtimeMirror, typeOf}
object ScalaTest {
def main(args: Array[String]): Unit = {
// 获取RiskDetaineeTrend类镜像
val myRuntimeMirror = runtimeMirror(RiskDetaineeTrend.getClass.getClassLoader)
val riskDetaineeTrend = RiskDetaineeTrend()
riskDetaineeTrend.recId = 1L
// 根据实例生成实例镜像
val myInstanceMirror = myRuntimeMirror.reflect(riskDetaineeTrend)
// 获取类中的一个成员变量
val myFieldTermName = typeOf[RiskDetaineeTrend].decl(TermName("day0613")).asTerm
// 从实例对象中,获取该成员变量的指针
val myFieldMirror = myInstanceMirror.reflectField(myFieldTermName)
// 给成员变量设置值
myFieldMirror.set(16.8)
// 查看输出的结果:RiskDetaineeTrend(1,16.8,0.0)
println(riskDetaineeTrend)
}
}