老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

kotlin更多語言結構——>反射-創新互聯

類引用kotlin更多語言結構——&g
t;反射

最基本的反射功能是獲取 Kotlin 類的運行時引用。要獲取對靜態已知的 Kotlin 類的引用,可以使用 類字面值 語法

網站建設哪家好,找創新互聯公司!專注于網頁設計、網站建設、微信開發、小程序制作、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了清水河免費建站歡迎大家使用!val c = MyClass::class

請注意,Kotlin 類引用與 Java 類引用不同。要獲得 Java 類引用,請在 KClass 實例上使用 .java 屬性

綁定的類引用(自 1.1 起)

通過使用對象作為接收者,可以用相同的 ::class 語法獲取指定對象的類的引用

val widget: Widget = ...... assert(widget is GoodWidget) { "Bad widget: ${widget::class.qualifiedName}" }

你可以獲取對象的精確類的引用,例如 GoodWidget 或 BadWidget,盡管接收者表達式的類型是 Widget

可調用引用

函數屬性以及構造函數的引用,除了作為自省程序結構外, 還可以用于調用或者用作函數類型的實例 。

所有可調用引用的公共超類型是 KCallable,其中 R 是返回值類型,對于屬性是屬性類型,對于構造函數是所構造類型

函數引用

當我們有一個具名函數聲明如下

fun isOdd(x: Int) = x % 2 != 0

我們可以很容易地直接調用它( isOdd(5) ),但是我們也可以將其作為一個函數類型的值,例如將其傳給另一個函數。為此,我們使用 :: 操作符

val numbers = listOf(1, 2, 3) println(numbers.filter(::isOdd))

函數引用屬于 KFunction 的子類型之一,取決于參數個數,例如 KFunction3

當上下文中已知函數期望的類型時,:: 可以用于重載函數。例如

fun isOdd(x: Int) = x % 2 != 0 fun isOdd(s: String) = s == "brillig" || s == "slithy" || s == "tove" val numbers = listOf(1, 2, 3) println(numbers.filter(::isOdd)) // 引用到 isOdd(x: Int)

或者,你可以通過將方法引用存儲在具有顯式指定類型的變量中來提供必要的上下文

val predicate: (String) -> Boolean = ::isOdd // 引用到 isOdd(x: String)

如果我們需要使用類的成員函數或擴展函數,它需要是限定的,例如 String::toCharArray 。

請注意,即使以擴展函數的引用初始化一個變量,其推斷出的函數類型也會沒有接收者(它會有一個接受接收者 對象的額外參數)。如需改為帶有接收者的函數類型,請明確指定其類型

val isEmptyStringList: List.() -> Boolean = List::isEmpty

示例:函數組合

考慮以下函數

fun compose(f: (B) -> C, g: (A) -> B): (A) -> C { return { x -> f(g(x)) } }

它返回一個傳給它的兩個函數的組合:compose(f, g) = f(g(*)) 。現在,你可以將其應用于可調用引用

fun length(s: String) = s.length val oddLength = compose(::isOdd, ::length) val strings = listOf("a", "ab", "abc") println(strings.filter(oddLength))

屬性引用

要把屬性作為 Kotlin中 的一等對象來訪問,我們也可以使用 :: 運算符

val x = 1 fun main() { println(::x.get()) println(::x.name) }

表達式 ::x 求值為 KProperty 類型的屬性對象,它允許我們使用 get() 讀取它的值,或者使用 name 屬性來獲取屬性名

對于可變屬性,例如 var y = 1 ,::y 返回 KMutableProperty 類型的一個值,該類型有一個 set() 方法

var y = 1 fun main() { ::y.set(2) println(y) }

屬性引用可以用在預期具有單個泛型參數的函數的地方

val strs = listOf("a", "bc", "def") println(strs.map(String::length))

要訪問屬于類的成員的屬性,我們這樣限定它

class A(val p: Int) val prop = A::p println(prop.get(A(1)))

對于擴展屬性

val String.lastChar: Char get() = this[length - 1] fun main() { println(String::lastChar.get("abc")) }

與 Java 反射的互操作性

  在 JVM 平臺上,標準庫包含反射類的擴展,它提供了與 Java 反射對象之間映射(參? kotlin.reflect.jvm包)。例如,要查找一個用作 Kotlin 屬性 getter 的 幕后字段或 Java方法,可以這樣寫 import kotlin.reflect.jvm.* class A(val p: Int) fun main() { println(A::p.javaGetter) // 輸出 "public final int A.getP()" println(A::p.javaField) // 輸出 "private final int A.p" }

要獲得對應于 Java 類的 Kotlin 類,請使用 .kotlin 擴展屬性

fun getKClass(o: Any): KClass = o.javaClass.kotlin

構造函數引用

構造函數可以像方法和屬性那樣引用。他們可以用于期待這樣的函數類型對象的任何地方:它與該構造函數接 受相同參數并且返回相應類型的對象。通過使用 :: 操作符并添加類名來引用構造函數。考慮下面的函數,它 期待一個無參并返回 Foo 類型的函數參數

class Foo fun function(factory: () -> Foo) { val x: Foo = factory() }

使用 ::Foo ,類 Foo 的零參數構造函數,我們可以這樣簡單地調用它

function(::Foo)

構造函數的可調用引用的類型也是KFunction的子類型之一,取決于其參數個數

綁定的函數與屬性引用(自 1.1 起)

你可以引用特定對象的實例方法

val numberRegex = "\d+".toRegex() println(numberRegex.matches("29")) val isNumber = numberRegex::matches println(isNumber("29"))

取代直接調用方法 matches 的是我們存儲其引用。這樣的引用會綁定到其接收者上。它可以直接調用(如上 例所示)或者用于任何期待一個函數類型表達式的時候

val numberRegex = "\d+".toRegex() val strings = listOf("abc", "124", "a70") println(strings.filter(numberRegex::matches))

比較綁定的類型和相應的未綁定類型的引用。綁定的可調用引用有其接收者“附加”到其上,因此接收者的類型 不再是參數

val isNumber: (CharSequence) -> Boolean = numberRegex::matches val matches: (Regex, CharSequence) -> Boolean = Regex::matches

屬性引用也可以綁定

val prop = "abc"::length println(prop.get())

自 Kotlin 1.2 起,無需顯式指定 this 作為接收者:this::foo 與 ::foo 是等價的

綁定的構造函數引用

inner 類的構造函數的綁定的可調用引用可通過提供外部類的實例來獲得

class Outer { inner class Inner } val o = Outer() val boundInnerCtor = o::Inner
名稱欄目:kotlin更多語言結構——>反射-創新互聯
瀏覽地址:http://www.xueling.net.cn/article/dioehd.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: CHINESE少妇激情 | 99久久综合国产精品二区国产 | 伊人55yiren综合开心 | 88国产精品视频一区二区三区 | 久久久久国产精品熟女影院浪 | 92国产精品午夜福利免费 | 131MM少妇做爰视频 | 精品国产av最大网站 | 欧美精品一区二区三区在线四季 | 亚洲国产精品成人综合色 | www亚洲最大aⅴ成人天堂 | 欧洲精品99毛片免费高清观看 | 精品欧美乱码久久久久久1区2区 | 日本不卡二区 | 精品欧美一区二区三区久久久 | 日韩精品中文有码 | 天堂精品久久 | 国产在线视频2019最新视频 | 蜜臀网站 | 成人片在线视频 | 狠狠躁天天躁无码中文字幕图 | 亚洲一区二区视频 | 国产亚洲高清一区 | 内射爽无广熟女亚洲 | 欧美日韩在线三区 | 日本老逼 | chinese国产高清av内谢 | 国产精品入口a级 | 亚洲精品系列 | 日韩高清中文字幕 | 18成禁人视频免费网站 | 国产XXXX做受视频 | 成人爽a毛片免费视频 | 99国产精品人妻无码免费农村 | 麻豆影片| 97久久精品人人澡人人爽缅北 | 免费无码中文字幕A级毛片 亚洲黄色成人网 | 少妇又紧又爽又刺激视频 | 男生操女生在线观看 | 精品无码成人片一区二区98 | 国产真实伦在线观看视频 |