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
            }
    }
  • 相关阅读:
    Redis未授权访问写Webshell和公私钥认证获取root权限
    Zabbix 2.2系列注入+getsehll
    XSS中的同源策略和跨域问题
    权限维持-wmi事件
    burp插件之xssValidator
    MySQL模拟Oralce闪回操作
    误删除innodb ibdata数据文件
    pt-heartbeat使用实践
    MySQL slave状态之Seconds_Behind_Master【转】
    如何快速REPAIR TABLE
  • 原文地址:https://www.cnblogs.com/loaderman/p/10149168.html
Copyright © 2011-2022 走看看