• Kotlin中反射


    枚举类成员

    import kotlin.reflect.full.memberFunctions
    import kotlin.reflect.full.memberProperties
    
    fun main(arg: Array<String>) {
        val p = Person::class  //类引用
        println("成员列表(属性和函数)" + p.members.size)
    
    
        for (member in p.members) {
            println(member.name + " " + member.returnType)
        }
        println("属性个数" + p.memberProperties.size)
        for (member in p.memberProperties) {
            println(member.name + " " + member.returnType)
        }
        println("函数个数" + p.memberFunctions.size)
        for (member in p.memberFunctions) {
            println(member.name + " " + member.returnType)
        }
    }
    
    
    
    class Person(val value: String, val num: Int) {
        fun process() {
    
        }
    }

    输出:

    成员列表(属性和函数)6
    num kotlin.Int
    value kotlin.String
    process kotlin.Unit
    equals kotlin.Boolean
    hashCode kotlin.Int
    toString kotlin.String
    属性个数2
    num kotlin.Int
    value kotlin.String
    函数个数4
    process kotlin.Unit
    equals kotlin.Boolean
    hashCode kotlin.Int
    toString kotlin.String

    动态调用成员函数

    fun main(arg: Array<String>) {
        val p = Person::process  //类引用
        //调用invoke函数执行process函数
        p.invoke(Person("abc",20))
        //利用java的反射机制指定process方法的名字
        val method = Person::class.java.getMethod("process")
        //动态调用process函数
        method.invoke(Person("tom",25))
    }
    
    
    
    class Person(val value: String, val num: Int) {
        fun process() {
           println("value $value num $num")
        }
    }

    动态调用成员属性

    fun main(arg: Array<String>) {
        val person = Person()
        //获取属性对象
        val name = Person::name
        //读取属性值
        println(name.get(person))
        //设置属性值
        name.set(person, "new")
        println(name.get(person))
    
    }
    
    
    class Person() {
        var name: String = "tom"
            get() = field
            set(value) {
                field = value
            }
    }
  • 相关阅读:
    数据恢复与硬盘数据结构
    Add dynamic tooltips to buttons in dialog(转)
    Visual C++ 2008资源全搜罗(转)
    (转)学习数据恢复(四)
    如何开启Vista Aero效果
    硬盘FAT文件系统原理的详细分析
    web form弹出提示框
    WIN32_FIND_DATA and CFileFind
    编程老手与高手的误区
    (转)解读NTFS(三)
  • 原文地址:https://www.cnblogs.com/loaderman/p/10149168.html
Copyright © 2020-2023  润新知