美文网首页Android精通Android
Kotlin reified - 关键字

Kotlin reified - 关键字

作者: ZHDelete | 来源:发表于2019-10-30 13:38 被阅读0次

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

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

    <meta charset="utf-8">

    下面我们再来说说reified函数,它与泛型密切相关
    比如我们启动一个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,可以更简单的实现

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

    我们知道在java中使用泛型的时候,无法通过泛型来得到Class,一般我们会将Class通过参数传过去。
    在kotlin中一个内联函数(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的内联函数,所以要在Context类中才可以使用,在其他地方使用则需要使用with函数:

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

    相关文章

      网友评论

        本文标题:Kotlin reified - 关键字

        本文链接:https://www.haomeiwen.com/subject/ejyovctx.html