zoukankan      html  css  js  c++  java
  • 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
            }
    }
  • 相关阅读:
    Python中property的使用
    超级水王问题
    electrion 修改api.js 就报错
    electron connection lost:The server closed the connection
    electron vscode 调试时始终部分 js 进不了断点
    electron Uncaught TypeError: Cannot read property 'dialog' of undefined
    C# IndexOf 报错 值不能为null,参数名value
    electron-vue 插入 vue-devTools
    Vue调试神器vue-devtools安装
    electrion vue __dirname is a NodeJS variable
  • 原文地址:https://www.cnblogs.com/loaderman/p/10149168.html
Copyright © 2011-2022 走看看