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