首發(fā)于公眾號: DSGtalk1989
26.反射
-
函數(shù)引用
我們用
::
加上函數(shù)名的方式表示函數(shù)的引用。我們有這樣一個需求叼耙,結(jié)合我們上面說過的高階函數(shù)腕窥,高階函數(shù)通常和面需要傳入的是一個函數(shù)。就比如
List
類的filter
這個高級函數(shù)筛婉。public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> { return filterTo(ArrayList<T>(), predicate) }
可以看到簇爆,需要傳入一個
(T) -> Boolean
的函數(shù),那么比如我們自己有定義過這樣一個函數(shù)爽撒。fun isOdd(x: Int) = x % 2 != 0
傳入的是
Int
類型入蛆,得到的是推斷出來的Boolean
類型,符合上面說的(T) -> Boolean
類型硕勿,這個時候我們?nèi)绾伟堰@個isOdd
方法傳入給高階函數(shù)呢哨毁,就要使用到函數(shù)的引用。val numbers = listOf(1, 2, 3) println(numbers.filter(::isOdd))
-
::
引用對應(yīng)的對象類引用對應(yīng)的是
MyClass::class -> KClass
方法引用對應(yīng)的是
::myFun -> KFunction<out R>
val
屬性引用對應(yīng)的是::valproperty -> KProperty
源武,可以調(diào)用get()
方法扼褪,可以獲得name
屬性。var
屬性引用對應(yīng)的是::varProperty -> KMutableProperty
粱栖,除了get()
方法和name
屬性之外還可以調(diào)用set()
方法針對類中的屬性引用话浇,使用的是
MyClass::property
。
Kotlin學(xué)習(xí)筆記之 1 基礎(chǔ)語法
Kotlin學(xué)習(xí)筆記之 2 基本數(shù)據(jù)類型
Kotlin學(xué)習(xí)筆記之 4 循環(huán)控制
Kotlin學(xué)習(xí)筆記之 9 數(shù)據(jù)類與密封類
Kotlin學(xué)習(xí)筆記之 12 對象表達式和對象聲明
Kotlin學(xué)習(xí)筆記之 13 基礎(chǔ)操作符run闹究、with幔崖、let、also跋核、apply
Kotlin學(xué)習(xí)筆記之 14 包與導(dǎo)入
Kotlin學(xué)習(xí)筆記之 18 函數(shù)
Kotlin學(xué)習(xí)筆記之 19 高階函數(shù)與 lambda 表達式
Kotlin學(xué)習(xí)筆記之 20 內(nèi)聯(lián)函數(shù)
Kotlin學(xué)習(xí)筆記之 21 解構(gòu)聲明
Kotlin學(xué)習(xí)筆記之 28 協(xié)程基礎(chǔ)
Kotlin學(xué)習(xí)筆記之 29 上下文與調(diào)度器
Kotlin學(xué)習(xí)筆記之 30 協(xié)程取消與超時
Kotlin學(xué)習(xí)筆記之 31 協(xié)程掛起函數(shù)的組合