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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: yjzz视频| 久久精视频 | 茄子视频懂你更多apl | 四虎一区 | 亚洲成年人专区 | 饱满奶大30p| 日本成熟 | 黑帮大佬与我的365天2标清中文 | 福利视频一区二区思瑞 | 99这里都是精品 | 久久中文字幕免费高清 | 猫影视tv接口 | 国内精品久久久久小说网 | 亚洲色图15p | 双性总裁被调教1v1 双性双根 | 倩女还魂在线观看完整版免费 | 国产裸露片段精华合集链接 | 天仙tv微福视频 | jj视频免费 | 国产麻豆成91 | 天天狠天天天天透在线 | 五月天国产精品 | 国产亚洲精品一区二区在线观看 | 精品成人网 | 1024在线视频精品免费 | 国产成+人+综合+亚洲欧美丁香花 | 99久久香蕉国产综合影院 | 男人女人叉叉叉 | 日韩欧美一区二区三区 | 久久电影院久久国产 | 久久精品一区二区免费看 | 操弄哥哥的108种姿势 | 国产成人免费高清激情视频 | 激情乱文 | 人与动videos | 俄罗斯处女 | 欧美美女被爆操 | 久久久无码精品无码国产人妻丝瓜 | 成人女人天堂午夜视频 | 91麻豆精品 | 人配人种视频xxxx |