欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Kotlin 基礎教程之反射

 更新時間:2017年06月05日 10:40:18   作者:行云間  
這篇文章主要介紹了Kotlin 基礎教程之反射的相關資料,需要的朋友可以參考下

Kotlin 基礎教程之反射

概述

反射是語言與庫中的一組功能, 可以在運行時刻獲取程序本身的信息.在Kotlin中,不僅可以通過發(fā)射獲取類的信息,同時可以獲取函數(shù)和屬性的信息。也就是說,在在運行時刻得到一個函數(shù)或屬性的名稱和數(shù)據類型) 可以通過簡單的函數(shù)式, 或交互式的編程方式實現(xiàn).

在Java平臺上, 使用反射功能所需要的運行時組件是作為一個單獨的JAR文件發(fā)布的( kotlinreflect.jar). 這是為了對那些不使用反射功能的應用程序, 減少其運行庫的大小. 如果你需要使用反射, 請注意將這個.jar文件添加到你的項目的classpath中.

類引用

最基本的反射功能就是獲取一個 Kotlin 類的運行時引用. 要得到一個靜態(tài)的已知的 Kotlin 類的引用, 可以使用類字面值(class literal) 語法:

val c = MyClass::class

類引用是一個 KClass 類型的值.

在Kotlin中定義了系列的常量,來表示類的信息.

  1. simpleName: String? 類的名稱
  2. qualifiedName: String? 類的全稱,包括包名
  3. members: Collection

函數(shù)引用

使用 :: 操作符來實現(xiàn)函數(shù)的引用。在高級函數(shù)中,我們通常使用函數(shù)作為參數(shù),在傳遞函數(shù)參數(shù)時通常都是用的函數(shù)引用,當時還不太理解,現(xiàn)在終于解惑了。

fun main(args: Array<String>) {
  val ages = listOf(18, 23, 17, 25)
  ages.filter(::isOld)
      .forEach(::println) // 打?。?3,25
}

fun isOld(age: Int): Boolean = age > 20

這里,::isOdd 是一個 (Int) -> Boolean 函數(shù)類型的值。

如果我們需要使用一個類的成員函數(shù), 或者一個擴展函數(shù), 就必須使用限定符. 比如, String::toCharArray指向 String 上的一個擴展函數(shù), 函數(shù)類型為: String.() -> CharArray

屬性引用

在Kotlin中, 對于包級別的屬性可以作為對象來訪問, 方法是使用 :: 操作符,我們可以獲取一個類型為 KProperty對象。

var x = 1
fun main(args: Array<String>) {
  println(::x.get()) // 打印結果為: "1"
  ::x.set(2)
  println(x) // 打印結果為: "2"
}

  1. 對于val屬性,我們可以通過KProperty的get()函數(shù)可以得到屬性值, 通過它的 name 屬性可以得到屬性名稱.
  2. 對于var屬性,返回的屬性對象的類型為 KMutableProperty, 我們不僅可以通過get()和name獲取該對象的屬性值和屬性名稱,還可以通過set()函數(shù)設置其屬性值。
  3. 對于訪問類的成員屬性, 我們需要使用限定符。返回的屬性對象的類型為KProperty1

構造器引用

構造器引用可以用于使用函數(shù)類型對象的地方, 但這個函數(shù)類型接受的參數(shù)應該與構造器相同, 返回值應該是構造器所屬類的對象實例. 引用構造器使用 :: 操作符, 再加上類名稱.

 fun main(args: Array<String>) {
    var person = newPerson("Jone", 20, "SH", ::Person)
  }

  fun newPerson(name: String, age: Int, address: String, factory: (String, Int, String) -> Person) : Person{
    return factory(name, age, address)
  }

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Spring框架AOP面向切面編程原理全面分析

    Spring框架AOP面向切面編程原理全面分析

    這篇文章主要介紹了Spring框架AOP面向切面編程的全面分析,文中附含詳細的示例代碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • Springboot項目異常處理及返回結果統(tǒng)一

    Springboot項目異常處理及返回結果統(tǒng)一

    這篇文章主要介紹了Springboot項目異常處理及返回結果統(tǒng)一,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • Java設計模式之代理模式與@Async異步注解失效的解決

    Java設計模式之代理模式與@Async異步注解失效的解決

    代理模式是Java常見的設計模式之一。所謂代理模式是指客戶端并不直接調用實際的對象,而是通過調用代理,來間接的調用實際的對象
    2022-07-07
  • Java中從JSON轉Java實體的多種方法詳解

    Java中從JSON轉Java實體的多種方法詳解

    在現(xiàn)在的日常開發(fā)中不管前端還是后端,JSON 格式的數(shù)據是用得比較多的,甚至可以說無處不在,這篇文章主要給大家介紹了關于Java中從JSON轉Java實體的多種方法,需要的朋友可以參考下
    2023-12-12
  • MyBatis如何調用存儲過程

    MyBatis如何調用存儲過程

    這篇文章主要介紹了MyBatis如何調用存儲過程問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java之api網關斷言及過濾器案例講解

    Java之api網關斷言及過濾器案例講解

    這篇文章主要介紹了Java之api網關斷言及過濾器案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot的HTTPS配置實現(xiàn)

    SpringBoot的HTTPS配置實現(xiàn)

    本文主要介紹了SpringBoot的HTTPS配置實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • java門禁系統(tǒng)面向對象程序設計

    java門禁系統(tǒng)面向對象程序設計

    這篇文章主要為大家詳細介紹了java門禁系統(tǒng)面向對象程序設計,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java開發(fā)必備知識之數(shù)組詳解

    Java開發(fā)必備知識之數(shù)組詳解

    數(shù)組對于每一門編程語言來說都是重要的數(shù)據結構之一,當然不同語言對數(shù)組的實現(xiàn)及處理也不盡相同.本篇文章為大家整理了Java最全關于數(shù)組的知識點,并給出其對應的代碼,需要的朋友可以參考下
    2021-06-06
  • Struts2修改上傳文件大小限制方法解析

    Struts2修改上傳文件大小限制方法解析

    這篇文章主要介紹了Struts2修改上傳文件大小限制的相關內容,包括決定Struts2上傳文件大小的因素,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09

最新評論