其他分享
首页 > 其他分享> > Kotlin学习之反射

Kotlin学习之反射

作者:互联网

获取Class对象

fun main(args: Array<String>) {
    val nums = ArrayList<Int>()
    println(nums::class)
    println(Person::class)
    val person = Person()
    println(person::class)
}
class Person

通过[对象/类]::class的格式获取到kotlin中的Class,实际为KClass类型,类似java中的Class。

操作属性和方法

import kotlin.reflect.KMutableProperty
import kotlin.reflect.full.memberFunctions
import kotlin.reflect.full.memberProperties
import kotlin.reflect.full.superclasses

fun main(args: Array<String>) {
    val person = Person()
    val personClass = Person::class
    //获取所有父类
    println(personClass.superclasses)
    //获取到name属性,有可能为null
    val nameProperty = personClass.memberProperties.find { it.name.equals("name") }
    //获取属性值,get()和call()效果一样
    println(nameProperty?.get(person))//lisi
    println(nameProperty?.call(person))//lisi
    //判断参数是否为可变的,是否为var
    if (nameProperty is KMutableProperty<*>) {
        //修改属性值,调用setter方法
        nameProperty.setter.call(person, "小明")
    }
    println(person)//name:小明
    //获取到printName方法,有可能为null
    val printNameFunc = personClass.memberFunctions.find { it.name.equals("printName") }
    //方法执行
    printNameFunc?.call(person)//小明
}

class Person {
    var name: String = "lisi"
    fun printName() {
        println(name)
    }
    override fun toString(): String {
        return "name:$name"
    }
}

核心为KClass,通过它可以获取到属性,方法,扩展方法,构造器等所有信息。

标签:反射,name,val,Person,Kotlin,学习,person,println,class
来源: https://www.cnblogs.com/strongmore/p/16326943.html