Kotlin reified - 關鍵字

reified關鍵字是用于Kotlin內聯(lián)函數(shù)的,修飾內聯(lián)函數(shù)的泛型,泛型被修飾后,在方法體里,能從泛型拿到泛型的Class對象,這與java是不同的,java需要泛型且需要泛型的Class類型時,是要把Class傳過來的,但是kotlin不用了,具體的參見 下面這篇博客:

kotlin學習筆記——泛型及reified函數(shù)(http://m.itdecent.cn/p/bbe694b2c0a8)

<meta charset="utf-8">

下面我們再來說說reified函數(shù),它與泛型密切相關
比如我們啟動一個activity代碼:

val intent = Intent(MainActivity@this, javaClass<DetailActivity>)  
intent.putExtra(DetailActivity.ID, item.id)  
intent.putExtra(DetailActivity.NAME, item.name)  
startActivity(intent)  

anko給我們提供了一個reified function,可以更簡單的實現(xiàn)

startActivity<DetailActivity>(DetailActivity.ID to item.id, DetailActivity.NAME to item.name)  

我們知道在java中使用泛型的時候,無法通過泛型來得到Class,一般我們會將Class通過參數(shù)傳過去。
在kotlin中一個內聯(lián)函數(shù)(inline)可以被具體化(reified),這意味著我們可以得到使用泛型類型的Class。
startActivity的源碼如下:

public inline fun <reified T: Activity> Context.startActivity(
        vararg params: Pair<String, String>) {
    val intent = Intent(this, T::class.javaClass)
    params forEach { intent.putExtra(it.first, it.second) }
    startActivity(intent)
}

可以看到使用T::class.javaClass就可以得到使用泛型類型的Class。
startActivity是Context的內聯(lián)函數(shù),所以要在Context類中才可以使用,在其他地方使用則需要使用with函數(shù):

with(context){  
     startActivity<...>(...)  
}  
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容