Kotlin中反射
2024-09-02 22:28:59
枚举类成员
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
}
}
最新文章
- Ubuntu搭建NFS
- 原创jquery插件treeTable(转)
- iOS7 edgesForExtendedLayout -- 解决冲突 / 系统偏移
- c# 图片路径转byte[] 插到数据库BLOB 图片长宽自定义
- 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)
- Best Practices for Using Alpha
- Interviews3D: APlatform for Interactive Handing of Massive Data Sets 读后感
- listview优化
- 201521123091 《Java程序设计》第2周学习总结
- Socket相关概念
- text和submit框的border问题
- Java Web项目(Extjs)报错二
- C# post数据时 出现如下错误: System.Net.WebException: 操作超时
- Tiny4412模式跳转
- 微信小程序中通过腾讯地图进行逆地址解析报错message: ";请求来源未被授权, 此次请求来源域名:servicewechat.com";
- 当通过Nuget包管理器获取还原组时,出现 提示 “xxxxx”已拥有为“xxxxx”定义的依赖项
- HTTP 中 GET 与 POST 的区别
- python 引入本地 module
- 软件设计基础-C/S系统
- 教你摆脱低级程序猿 项目中cocopads的安装使用
热门文章
- inotify+rsync文件实时同步
- Java 基础 - 泛型类/泛型方法/类型通配符&#39;?&#39; 的用法及栗子
- 设计模式-模板方法设计模式--Template Method design pattern
- nginx中ngx_http_gzip_module模块
- 一个ball例程带你进入 Halcon 世界
- .NET界面开发新体验!DevExpress v19.2.4全新来袭
- vscode python文件注释乱码怎么办?
- [hdoj6415 Rikka with Nash Equilibrium][dp]
- 自定义错误throw
- 第二章 C#语法快速热身