kotlin学习(10)反射


  反射,简单来说,是一种在运行时动态地访问对象属性和方法的方式,而不需要事先确定这些属性是什么。

Kotlin反射API:KClass、KCallable、KFunction、KPropperty

KClass

  对应Java中的java.lang.class

//Kotlin获取一个类
val myClass: KClass<Person> = Person::class

//Java获取一个类
Class<Person> myClass = Class.forName("com.xx.xx.Person")

//Java运行时获取一个对象的类
Person person = new Person()
Class<Person> myClass = person.getClass()

//Kotlin运行时获取一个对象的类
val person = Person("Alice","20")
val myClass = person.javaClass.kotlin
>>>println(myClass.simpleName)
Person
>>>myClass.memberProperties.forEach{ println(it.name) }
age
name

KCallable(适用于不知道参数类型和数量,通用)

  KCallable是属性和函数的超借口。类的所有成员组成的列表是一个KCallable实例的集合。

  它声明了call方法,相当于Java中的invoke方法。

fun foo(x: Int) = println(x)
>>>val myFun =::foo
>>>myFun.call(4)
4

KFunctionN(适用于知道参数类型和数量,有安全性)

   val myFun: KFunction2<Int, Int>= ::sum 中,2表示接收2个形参,尖括号里说明了参数的类型。

  可以直接调用 myFun(4,6) 

KProperty

var counter = 0
>>>val kProperty = ::counter
>>>kProperty.setter.call(2)
>>>println(kProperty.get())
2

 

 

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM