Kotlin學習筆記:概述
Kotlin學習筆記:基本語法和函數
Kotlin學習筆記:類和接口
Kotlin學習筆記:lambda編程
Kotlin學習筆記:類型系統
Kotlin學習筆記:泛型
Kotlin學習筆記:注解和反射
Kotlin的泛型創(chuàng)建和Java幾乎一樣硅蹦。在運行時葵蒂,也會進行類型擦除脾猛。
類型參數約束
T : Number等價于T extends Number
泛型的定義
類型參數的約束
T : Number等價于T extends Number
reified類型參數
Kotlin在運行時被碗,也會進行類型擦除声滥。但是如果想要在運行時獲取正確的類型參數類型,可以使用refied關鍵字跷睦。reified只能用于inline函數赡矢。
inline fun <reified T> isA(value: Any) = value is T
>>> println(isA<String>("abc"))
true
>>> println(isA<String>(123))
false
Collection的filterIsInstance方法就是使用refied,可以從集合中選擇指定類型的實例饱须。
inline fun <reified T> Iterable<*>.filterIsInstance(): List<T>{
val destination = mutableListOf<T>()
for (element in this) {
if (element is T){
destination.add(element)
}
}
return destination
}
實現原理
編譯器把內聯函數的字節(jié)碼插入到每一次被調用的地方
每次調用reified函數時域醇,編譯器知道類型參數的確切類型、
編譯器可以生產引用作為類型實參的具體類字節(jié)碼
生成的字節(jié)碼引用了具體類蓉媳,而不是類型參數
refied函數不能被Java調用
應用場景
inline fun <reified T: Activity> Context.startActivity(){
val intent = Intent(this, T::class.java)
startActivity(intent)
}