Scala使用反射动态选择成员变量进行值的设置

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

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值