Kotlin反射

文章目录

  • KOtlin-reflect 核心 API
    • KClass
      • 调用函数
    • 调用属性

KOtlin-reflect 核心 API

主要常用接口:

KClass

提供了很多函数可以获得运行时对象对相关信息。
KClass的一个实例表示对类对引用,在程序代码中引用类使用::运算符
用法:
方式1
var clz1 = Int::class
方式2
var user = User::class
方法:
simpleName 获取类名
qualifiedName 类全名
isAbstract 是否抽象类
isData 是否数据类
constructors 获取所有构造函数
primaryConstructor 获取主构造函数
方法很多!

调用函数

通过反射调用函数需要KFunction实例,通过两种方式获取
一种是函数引用;另外一种是通过KClass提供对API获取
具体代码,首先创建一个类
class user{
var name
var age

fun setNameAndAge(name:String,age:Int){
this,name = name
this.age = age
}
fun add(a:Int,b:int) = a + b
fun sub(a:Int,b:int) = a - b

fun calculate(opr:Char):(Int,Int) - > Int = if (opr == “+”)::add else ::sub
}
fun main(){
var fn1 = ::add
var fn2 = ::sub 创建两个引用
val fun = calculate(“+”)
fn1(10,5) //15
fn2(10,5) // 5
fn3(10,5) //15

val clz = user::class 申明类的引用

val user = clz.createInstance() 获取反射性实例化对象
clz.functions.forEach { println(it.name)} 调用函数集合,打印当前类的方法集合
val user1 = clz.functions.first 获取类中的第一个函数
user1.call(user,“张三”,15) 调用第一个函数方法,传值需要调用call方法并且要把反射实例化对象传入第一个参数中
}

调用属性

KProperty 通过两种方式获取,一种属性引用,一种是通过KClass提供的API获取
memberProperties 获取所有属性成员

你可能感兴趣的:(笔记)