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
            }
    }
  • 相关阅读:
    centos ftp搭建
    python_模块
    python_如何建立包
    python_类
    python_递归
    python_函数
    python_字典
    python_条件、循环语句
    python_中文乱码问题
    Viola–Jones object detection framework--Rapid Object Detection using a Boosted Cascade of Simple Features中文翻译 及 matlab实现(见文末链接)
  • 原文地址:https://www.cnblogs.com/loaderman/p/10149168.html
Copyright © 2011-2022 走看看