枚举类成员

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中反射的更多相关文章

  1. Kotlin 中文文档

    Kotlin 中文文档 标签: Kotlinkotlin中文文档 2017-02-14 18:14 4673人阅读 评论(0) 收藏 举报  分类: kotlin 转载地址:http://www.tu ...

  2. Kotlin中变量不同于Java: var 对val(KAD 02)

    原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...

  3. Java中反射的三种常用方式

    Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...

  4. C#中反射接受的字符串需要满足的Backus-Naur Form语法

    MSDN的Specifying Fully Qualified Type Names指明了C#中反射接受的字符串需要满足如下的Backus-Naur Form语法. BNF grammar of fu ...

  5. .NET中反射机制的使用与分析

    .NET中反射机制的使用与分析 [日期:2008-06-30] 来源:  作者:志伟     .NET反射的定义:审查元数据并收集关于它的类型信息的能力. 元数据是一种二进制信息,用以对存储在公共语言 ...

  6. java中反射学习整理

    转载请注明:http://blog.csdn.net/j903829182/article/details/38405735 反射主要是指程序能够訪问.检測和改动它本身的状态或行为的一种能力. jav ...

  7. 在C++中反射调用.NET(二)

    反射调用返回复杂对象的.NET方法 定义数据接口 上一篇在C++中反射调用.NET(一)中,我们简单的介绍了如何使用C++/CLI并且初步使用了反射调用.NET程序集的简单方法,今天我们看看如何在C+ ...

  8. 在C++中反射调用.NET(一)

    为什么要在C++中调用.NET 一般情况下,我们常常会在.NET程序中调用C/C++的程序,使用P/Invoke方式进行调用,在编写代码代码的时候,首先要导入DLL文件,然后在根据C/C++的头文件编 ...

  9. 在C++中反射调用.NET(三)

    在.NET与C++之间传输集合数据 上一篇<在C++中反射调用.NET(二)>中,我们尝试了反射调用一个返回DTO对象的.NET方法,今天来看看如何在.NET与C++之间传输集合数据. 使 ...

随机推荐

  1. 定义Java类实现字节流转字符流

    package com.buaa.comparable; import java.io.BufferedReader;import java.io.File;import java.io.FileIn ...

  2. HTML锚点的使用

    锚点: 连接到的本页面的位置:

  3. process exporter 配置项解释

    process exporter在prometheus中用于监控进程,通过process exporter,可从宏观角度监控应用的运行状态(譬如监控redis.mysql的进程资源等) 配置文件样例如 ...

  4. Bind Mounts and File System Mount Order

         When you use the bind option of the mount command, you must be sure that the file systems are m ...

  5. xargs 使用详解

    参考转载:https://www.cnblogs.com/f-ck-need-u/p/5925923.html#auto_id_12 xargs 作用:将管道传输过来的stdin进行处理(分割.分批) ...

  6. c/c++编译器配置(交叉编译重要参数)、交叉编译动态库与as配置、mk初步

    gcc/g++/clang,相当于javac: 了解c/c++编译器的基本使用,能够在后续移植第三方框架进行交叉编译时,清楚的了解应该传递什么参数. clang: clang 是一个C.C++.Obj ...

  7. aiops常用算法

    1.数据聚合/关联技术 概念聚类算法AOI分类算法K近邻/贝叶斯分类器/logistic回归(LR)/支持向量机(SVM)/随机森林(RF) 2.数据异常点检测技术独立森林算法 3.故障诊断和分析策略 ...

  8. setuptools 版本太旧

    第二是 setuptools 版本太旧,所以出现以下问题Command "python setup.py egg_info" failed with error code 1 in ...

  9. django安装好之后,django-admin仍然不能使用的问题

    我使用的是python3,python3不能找到django的正确位置.需要下面这样才能正确建立mysite python3 /usr/lib/python2./site-packages/djang ...

  10. 关于数组的ORDERBY自带函数

    昨天有练习对数字阵列进行排序,<C#阵列Array排序>https://www.cnblogs.com/insus/p/10825174.html 其实一切都弄得很复杂,array已经有2 ...