kotlin学习(10)反射

Posted liumaowu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

 

  

以上是关于kotlin学习(10)反射的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin学习手记——反射

kotlin-从一个片段更改多个片段的小数位

kotlin学习注解

Kotlin|Kotlin反射

Kotlin|Kotlin反射

Kotlin|Kotlin反射