• kotlin学习(10)反射


      反射,简单来说,是一种在运行时动态地访问对象属性和方法的方式,而不需要事先确定这些属性是什么。

    Kotlin反射API:KClass、KCallable、KFunction、KPropperty

    KClass

      对应Java中的java.lang.class

    //Kotlin获取一个类
    val myClass: KClass<Person> = Person::class
    
    //Java获取一个类
    Class<Person> myClass = Class.forName("com.xx.xx.Person")
    
    //Java运行时获取一个对象的类
    Person person = new Person()
    Class<Person> myClass = person.getClass()
    
    //Kotlin运行时获取一个对象的类
    val person = Person("Alice","20")
    val myClass = person.javaClass.kotlin
    >>>println(myClass.simpleName)
    Person
    >>>myClass.memberProperties.forEach{ println(it.name) }
    age
    name

    KCallable(适用于不知道参数类型和数量,通用)

      KCallable是属性和函数的超借口。类的所有成员组成的列表是一个KCallable实例的集合。

      它声明了call方法,相当于Java中的invoke方法。

    fun foo(x: Int) = println(x)
    >>>val myFun =::foo
    >>>myFun.call(4)
    4

    KFunctionN(适用于知道参数类型和数量,有安全性)

       val myFun: KFunction2<Int, Int>= ::sum 中,2表示接收2个形参,尖括号里说明了参数的类型。

      可以直接调用 myFun(4,6) 

    KProperty

    var counter = 0
    >>>val kProperty = ::counter
    >>>kProperty.setter.call(2)
    >>>println(kProperty.get())
    2

      

  • 相关阅读:
    Linux常用命令--清屏
    [LeetCode]Remove Duplicates from Sorted Array
    [LeetCode]Combinations
    [LeetCode]Search in Rotated Sorted Array II
    [LeetCode]Binary Tree Level Order Traversal II
    [LeetCode]Binary Tree Level Order Traversal
    [LeetCode]H-Index II
    [LeetCode]H-Index
    [LeetCode]Symmetric Tree
    [LeetCode]Remove Element
  • 原文地址:https://www.cnblogs.com/liumaowu/p/9413264.html
Copyright © 2020-2023  润新知