最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin 基礎(chǔ)教程之反射

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

Kotlin 基礎(chǔ)教程之反射

概述

反射是語(yǔ)言與庫(kù)中的一組功能, 可以在運(yùn)行時(shí)刻獲取程序本身的信息.在Kotlin中,不僅可以通過(guò)發(fā)射獲取類(lèi)的信息,同時(shí)可以獲取函數(shù)和屬性的信息。也就是說(shuō),在在運(yùn)行時(shí)刻得到一個(gè)函數(shù)或?qū)傩缘拿Q(chēng)和數(shù)據(jù)類(lèi)型) 可以通過(guò)簡(jiǎn)單的函數(shù)式, 或交互式的編程方式實(shí)現(xiàn).

在Java平臺(tái)上, 使用反射功能所需要的運(yùn)行時(shí)組件是作為一個(gè)單獨(dú)的JAR文件發(fā)布的( kotlinreflect.jar). 這是為了對(duì)那些不使用反射功能的應(yīng)用程序, 減少其運(yùn)行庫(kù)的大小. 如果你需要使用反射, 請(qǐng)注意將這個(gè).jar文件添加到你的項(xiàng)目的classpath中.

類(lèi)引用

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

val c = MyClass::class

類(lèi)引用是一個(gè) KClass 類(lèi)型的值.

在Kotlin中定義了系列的常量,來(lái)表示類(lèi)的信息.

  1. simpleName: String? 類(lèi)的名稱(chēng)
  2. qualifiedName: String? 類(lèi)的全稱(chēng),包括包名
  3. members: Collection

函數(shù)引用

使用 :: 操作符來(lái)實(shí)現(xiàn)函數(shù)的引用。在高級(jí)函數(shù)中,我們通常使用函數(shù)作為參數(shù),在傳遞函數(shù)參數(shù)時(shí)通常都是用的函數(shù)引用,當(dāng)時(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 是一個(gè) (Int) -> Boolean 函數(shù)類(lèi)型的值。

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

屬性引用

在Kotlin中, 對(duì)于包級(jí)別的屬性可以作為對(duì)象來(lái)訪問(wèn), 方法是使用 :: 操作符,我們可以獲取一個(gè)類(lèi)型為 KProperty對(duì)象。

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

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

構(gòu)造器引用

構(gòu)造器引用可以用于使用函數(shù)類(lèi)型對(duì)象的地方, 但這個(gè)函數(shù)類(lèi)型接受的參數(shù)應(yīng)該與構(gòu)造器相同, 返回值應(yīng)該是構(gòu)造器所屬類(lèi)的對(duì)象實(shí)例. 引用構(gòu)造器使用 :: 操作符, 再加上類(lèi)名稱(chēng).

 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)
  }

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

相關(guān)文章

  • Springboot詳解底層啟動(dòng)過(guò)程

    Springboot詳解底層啟動(dòng)過(guò)程

    這篇文章主要介紹了SpringBoot啟動(dòng)過(guò)程的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringBoot構(gòu)造器注入循環(huán)依賴(lài)及解決方案

    SpringBoot構(gòu)造器注入循環(huán)依賴(lài)及解決方案

    這篇文章主要介紹了SpringBoot構(gòu)造器注入循環(huán)依賴(lài)及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • SpringBoot中的@PostConstruct注解詳細(xì)解析

    SpringBoot中的@PostConstruct注解詳細(xì)解析

    這篇文章主要介紹了SpringBoot中的@PostConstruct注解詳細(xì)解析,@PostConstruct注解,主要用于在Spring容器啟動(dòng)時(shí)執(zhí)行某些操作或者任務(wù),@PostConstruct注解一般放在BEAN的方法上,一旦BEAN初始化完成之后,將會(huì)調(diào)用這個(gè)方法,需要的朋友可以參考下
    2024-01-01
  • JAVA中字符串如何與整型數(shù)字相加

    JAVA中字符串如何與整型數(shù)字相加

    這篇文章主要介紹了JAVA中字符串如何與整型數(shù)字相加,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Java三目運(yùn)算符的實(shí)戰(zhàn)案例

    Java三目運(yùn)算符的實(shí)戰(zhàn)案例

    三目運(yùn)算符在java中運(yùn)用可以說(shuō)非常的廣泛,下面這篇文章主要給大家介紹了關(guān)于Java三目運(yùn)算符的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • java基礎(chǔ)javeSE程序邏輯控制語(yǔ)法

    java基礎(chǔ)javeSE程序邏輯控制語(yǔ)法

    主要講解Java中程序的邏輯控制語(yǔ)句包括 Java中的輸入輸出方式 順序結(jié)構(gòu)循環(huán)結(jié)構(gòu)等,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • java數(shù)據(jù)庫(kù)開(kāi)發(fā)之JDBC的完整封裝兼容多種數(shù)據(jù)庫(kù)

    java數(shù)據(jù)庫(kù)開(kāi)發(fā)之JDBC的完整封裝兼容多種數(shù)據(jù)庫(kù)

    這篇文章主要介紹了java數(shù)據(jù)庫(kù)開(kāi)發(fā)之JDBC的完整封裝兼容多種數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2020-02-02
  • spring boot+自定義 AOP 實(shí)現(xiàn)全局校驗(yàn)的實(shí)例代碼

    spring boot+自定義 AOP 實(shí)現(xiàn)全局校驗(yàn)的實(shí)例代碼

    最近公司重構(gòu)項(xiàng)目,重構(gòu)為最熱的微服務(wù)框架 spring boot, 重構(gòu)的時(shí)候遇到幾個(gè)可以統(tǒng)一處理的問(wèn)題。這篇文章主要介紹了spring boot+自定義 AOP 實(shí)現(xiàn)全局校驗(yàn) ,需要的朋友可以參考下
    2019-04-04
  • springboot結(jié)合前端實(shí)現(xiàn)網(wǎng)頁(yè)跳轉(zhuǎn)功能實(shí)例

    springboot結(jié)合前端實(shí)現(xiàn)網(wǎng)頁(yè)跳轉(zhuǎn)功能實(shí)例

    今天處理Springboot統(tǒng)一異常攔截的時(shí)候,遇到了頁(yè)面跳轉(zhuǎn)的問(wèn)題,這篇文章主要給大家介紹了關(guān)于springboot結(jié)合前端實(shí)現(xiàn)網(wǎng)頁(yè)跳轉(zhuǎn)功能的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 詳解如何編寫(xiě)一個(gè)高效的Java工具類(lèi)

    詳解如何編寫(xiě)一個(gè)高效的Java工具類(lèi)

    本文將深入探討如何編寫(xiě)一個(gè)高效的Java工具類(lèi),并結(jié)合Spring
    Boot與IRIS數(shù)據(jù)庫(kù)的集成,展示一個(gè)具體的實(shí)例,有需要的小伙伴可以了解下
    2024-10-10

最新評(píng)論

扎赉特旗| 德庆县| 安宁市| 五峰| 容城县| 大丰市| 富川| 和龙市| 珲春市| 霸州市| 平谷区| 镇巴县| 攀枝花市| 屯昌县| 商河县| 庐江县| 松溪县| 咸阳市| 安西县| 宝兴县| 泸州市| 余江县| 扎鲁特旗| 营口市| 南江县| 靖宇县| 加查县| 新邵县| 安义县| 隆子县| 神池县| 岳阳市| 金塔县| 卢湾区| 稷山县| 颍上县| 读书| 常山县| 大悟县| 称多县| 柏乡县|