枚举类成员

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
}
}

最新文章

  1. Ubuntu搭建NFS
  2. 原创jquery插件treeTable(转)
  3. iOS7 edgesForExtendedLayout -- 解决冲突 / 系统偏移
  4. c# 图片路径转byte[] 插到数据库BLOB 图片长宽自定义
  5. 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)
  6. Best Practices for Using Alpha
  7. Interviews3D: APlatform for Interactive Handing of Massive Data Sets 读后感
  8. listview优化
  9. 201521123091 《Java程序设计》第2周学习总结
  10. Socket相关概念
  11. text和submit框的border问题
  12. Java Web项目(Extjs)报错二
  13. C# post数据时 出现如下错误: System.Net.WebException: 操作超时
  14. Tiny4412模式跳转
  15. 微信小程序中通过腾讯地图进行逆地址解析报错message: &quot;请求来源未被授权, 此次请求来源域名:servicewechat.com&quot;
  16. 当通过Nuget包管理器获取还原组时,出现 提示 “xxxxx”已拥有为“xxxxx”定义的依赖项
  17. HTTP 中 GET 与 POST 的区别
  18. python 引入本地 module
  19. 软件设计基础-C/S系统
  20. 教你摆脱低级程序猿 项目中cocopads的安装使用

热门文章

  1. inotify+rsync文件实时同步
  2. Java 基础 - 泛型类/泛型方法/类型通配符&#39;?&#39; 的用法及栗子
  3. 设计模式-模板方法设计模式--Template Method design pattern
  4. nginx中ngx_http_gzip_module模块
  5. 一个ball例程带你进入 Halcon 世界
  6. .NET界面开发新体验!DevExpress v19.2.4全新来袭
  7. vscode python文件注释乱码怎么办?
  8. [hdoj6415 Rikka with Nash Equilibrium][dp]
  9. 自定义错误throw
  10. 第二章 C#语法快速热身