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

 

 

  

posted @ 2018-08-03 11:44  陆卯伍  阅读(2681)  评论(0编辑  收藏  举报