码迷,mamicode.com
首页 > 其他好文 > 详细

kotlin学习(10)反射

时间:2018-08-03 14:48:35      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:code   nbsp   sum   事先   var   运行   new   反射   表示   

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

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)反射

标签:code   nbsp   sum   事先   var   运行   new   反射   表示   

原文地址:https://www.cnblogs.com/liumaowu/p/9413264.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!