Kotlin reified - 关键字

reified关键字是用于Kotlin内联函数的,修饰内联函数的泛型,泛型被修饰后,在方法体里,能从泛型拿到泛型的Class对象,这与java是不同的,java需要泛型且需要泛型的Class类型时,是要把Class传过来的,但是kotlin不用了,具体的参见 下面这篇博客:

kotlin学习笔记——泛型及reified函数(https://www.jianshu.com/p/bbe694b2c0a8)

下面我们再来说说reified函数,它与泛型密切相关
比如我们启动一个activity代码:

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

anko给我们提供了一个reified function,可以更简单的实现

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

我们知道在java中使用泛型的时候,无法通过泛型来得到Class,一般我们会将Class通过参数传过去。
在kotlin中一个内联函数(inline)可以被具体化(reified),这意味着我们可以得到使用泛型类型的Class。
startActivity的源码如下:

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

可以看到使用T::class.javaClass就可以得到使用泛型类型的Class。
startActivity是Context的内联函数,所以要在Context类中才可以使用,在其他地方使用则需要使用with函数:

with(context){  
     startActivity<...>(...)  
}  

你可能感兴趣的:(Kotlin reified - 关键字)