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
        }
}
Kotlin中反射的更多相关文章
- Kotlin 中文文档
		Kotlin 中文文档 标签: Kotlinkotlin中文文档 2017-02-14 18:14 4673人阅读 评论(0) 收藏 举报 分类: kotlin 转载地址:http://www.tu ... 
- Kotlin中变量不同于Java: var 对val(KAD 02)
		原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ... 
- Java中反射的三种常用方式
		Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ... 
- C#中反射接受的字符串需要满足的Backus-Naur Form语法
		MSDN的Specifying Fully Qualified Type Names指明了C#中反射接受的字符串需要满足如下的Backus-Naur Form语法. BNF grammar of fu ... 
- .NET中反射机制的使用与分析
		.NET中反射机制的使用与分析 [日期:2008-06-30] 来源: 作者:志伟 .NET反射的定义:审查元数据并收集关于它的类型信息的能力. 元数据是一种二进制信息,用以对存储在公共语言 ... 
- java中反射学习整理
		转载请注明:http://blog.csdn.net/j903829182/article/details/38405735 反射主要是指程序能够訪问.检測和改动它本身的状态或行为的一种能力. jav ... 
- 在C++中反射调用.NET(二)
		反射调用返回复杂对象的.NET方法 定义数据接口 上一篇在C++中反射调用.NET(一)中,我们简单的介绍了如何使用C++/CLI并且初步使用了反射调用.NET程序集的简单方法,今天我们看看如何在C+ ... 
- 在C++中反射调用.NET(一)
		为什么要在C++中调用.NET 一般情况下,我们常常会在.NET程序中调用C/C++的程序,使用P/Invoke方式进行调用,在编写代码代码的时候,首先要导入DLL文件,然后在根据C/C++的头文件编 ... 
- 在C++中反射调用.NET(三)
		在.NET与C++之间传输集合数据 上一篇<在C++中反射调用.NET(二)>中,我们尝试了反射调用一个返回DTO对象的.NET方法,今天来看看如何在.NET与C++之间传输集合数据. 使 ... 
随机推荐
- matplotlib基本函数
			数据分析 matlab Numpy + scipy + pandas +matplotlib 数据计算 +科学应用+数据清洗+数据可视化 1 Numpy概述 1 基于c语言的python接口的数值算法 ... 
- js     概述 ( 一 )
			1 JS 概述 1 简称JS,是一种浏览器解释型语言,代码嵌套在HTML页面中,将由浏览器解释执行 作用:主要用来实现页面的动态效果,实现用户交互,实现网页中的网络请求 2 JS 组成 : 1 ECM ... 
- kafka学习遗留问题
			1.ZK在kafka中的作用 2.Kafka支持优先级队列么 未完待续 
- C#中设置密码框 ,用符号代替密码
			添加控件 添加控件 确认键代码 private void button1_Click(object sender, EventArgs e) { //修改密码.新密码,重复新密码,两次输入的新密码必须 ... 
- mysql打开报错2013解决办法
			修改mysql配置文件 在[mysqld]下面设置skip-name-resolve 重启mysql from :https://www.jb51.net/article/52637.htm 
- 【python】使用xlrd,xlwt来操作已存在的excel表
			import xlrd import xlwt from xlutils.copy import copy # 打开想要更改的excel文件 old_excel = xlrd.open_workboo ... 
- 《流畅的Python》Data Structures--第2章序列array
			第二部分 Data Structure Chapter2 An Array of Sequences Chapter3 Dictionaries and Sets Chapter4 Text vers ... 
- onbeforeunload、onpagehide、onunload、onload、onpageshow的正确执行顺序
			一.Chrome支持onbeforeunload.onpagehide.onunload,只是在这些方法执行的时候alert,console这些方法已经被注销了. 二.浏览器跳转.关闭.刷新时都按a, ... 
- 今天把自己的ocr镜像开源了
			docker pull docker.io/zhangbo2008/ocr_docker_byzhang:v1 即可,欢迎下载 
- Oracle-锁的查询和处理
			1.查出锁定object的session的信息以及被锁定的object名 SELECT L.SESSION_ID SID, S.SERIAL#, L.LOCKED_MODE, L.ORACLE_USE ... 
