一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Kotlin 基礎教程之反射

Kotlin 基礎教程之反射

2020-11-08 17:27行云間 Java教程

這篇文章主要介紹了Kotlin 基礎教程之反射的相關資料,需要的朋友可以參考下

Kotlin 基礎教程之反射

概述

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

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

類引用

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

?
1
val c = MyClass::class

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

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

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

函數引用

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

?
1
2
3
4
5
6
7
fun main(args: Array<String>) {
  val ages = listOf(18, 23, 17, 25)
  ages.filter(::isOld)
      .forEach(::println) // 打印:23,25
}
 
fun isOld(age: Int): Boolean = age > 20

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

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

屬性引用

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

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

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

構造器引用

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

?
1
2
3
4
5
6
7
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)
 }

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

原文鏈接:http://blog.csdn.net/io_field/article/details/53572565

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人免费公开视频 | 国产乱码免费卡1卡二卡3卡四 | 日本成人黄色网址 | 男女男在线精品网站免费观看 | 欧美一二区视频 | 日本护士撒尿 | 高清女主播一区二区三区 | 国产日韩欧美在线观看不卡 | 国产成人亚洲综合a∨婷婷 国产成人亚洲精品乱码在线观看 | 91在线 在线播放 | 欧美日韩一区二区三区韩大 | 精品国产综合 | 天天视频官网天天视频在线 | 91av俱乐部| 干b视频在线观看 | 国产精品视频播放 | 国产va免费精品高清在线 | 搞逼综合网 | 亚洲国产日韩欧美在线vip1区 | av中文字幕在线 | 四虎影视在线观看永久地址 | 国产免费资源 | 日韩 视频在线播放 | 精品视频在线免费播放 | 亚洲色图丝袜 | 亚州在线播放 | 36美女厕所撒尿全过程 | 楚乔传第二部免费播放电视连续剧 | 美女脱了内裤张开腿亲吻男生 | 视频一区二区 村上凉子 | 成人aaaa| 99视频都是精品热在线播放 | 玩两个少妇女邻居 | 日日摸日日碰夜夜爽97纠 | 五月天精品视频在线观看 | 午夜国产精品福利在线观看 | 欧美一级专区免费大片 | 天堂资源wwww在线看 | 亚洲黄色小视频 | 国产这里有精品 | 国产一区二区精品 |