【大数据开发】Scala——反射机制

import scala.reflect.runtime.universe
import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe.typeOf

class Person(val name: String, val age: Int){

    def myPrint(): Unit ={
        println(name + "," + age)
    }
}

object ReflectTest {
    def main(args: Array[String]): Unit = {
        // 1.获得当前JVM的所有类的反射
        val rm: universe.Mirror = universe.runtimeMirror(getClass.getClassLoader)

        // 2.生成一个Person实例
        val person: Person = new Person("xiaomei", 23)

        // 3.根据person实例生成一个反射
        val instanceMirror: universe.InstanceMirror = rm.reflect(person)

        // 3.1.根据反射,获得name成员的信息,并指定asTerm类型的符号
        val nameTermSymbol: universe.TermSymbol = typeOf[Person].decl(TermName("name")).asTerm

        // 3.2.根据上一步的符号,从Person的实例镜像中,取出一个成员符号
        val nameMirror: universe.FieldMirror = instanceMirror.reflectField(nameTermSymbol)
        // 3.3.通过get方法访问成员信息
        println(nameMirror.get)
        // 3.4.通过set方法, 改变成员信息
        //   即便是val, 在反射中也可以改变
        nameMirror.set("xiaoqiang")
        println(nameMirror.get)



        // 3.5根据反射,获得myPrint成员的信息,并指定asMethod类型的符号
        val myPrintTermSymbol: universe.MethodSymbol = typeOf[Person].decl(TermName("myPrint")).asMethod
        // 3.6.根据上一步的符号,从Person的实例镜像中,取出一个成员符号
        val myPrintMirror: universe.MethodMirror = instanceMirror.reflectMethod(myPrintTermSymbol)
        // 3.7.调用反射的方法
        myPrintMirror()

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值