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
            }
    }
  • 相关阅读:
    C#MessageBox使用
    ListBox的使用
    中文乱码的几种情况以及解决方法
    使用Application
    Android笔记之标题栏的各种操作
    Android笔记之日期选择器
    Viewpager制作自动左右循环滑动
    JAVA入门到精通-第17讲-排序
    ***JAVA入门到精通-第14讲-final-作业评讲
    JAVA入门到精通-第13讲-抽象类-接口
  • 原文地址:https://www.cnblogs.com/loaderman/p/10149168.html
Copyright © 2011-2022 走看看