美文网首页AndroidKotlinAndroid知识
Kotlin(1.1)学习笔记(12)——reified类型

Kotlin(1.1)学习笔记(12)——reified类型

作者: Rhett_S | 来源:发表于2017-06-06 17:12 被阅读57次

在java中我们判断object是否为Class的实例是比较麻烦的一件事,kotlin中则使用了Reified关键字来简化我们的工作。
看下官方给的例子:

fun <T> TreeNode.findParentOfType(clazz: Class<T>): T? {
    var p = parent
    while (p != null && !clazz.isInstance(p)) {
        p = p.parent
    }
    @Suppress("UNCHECKED_CAST")
    return p as T?
}

使用反射比较麻烦,使用reified的之后看起来能更加明了:

inline fun <reified T> TreeNode.findParentOfType(): T? {
    var p = parent
    while (p != null && p !is T) {
        p = p.parent
    }
    return p as T?
}

同样是判断p是否为T类型,我们能像普通类一样使用is,as
注意:非内联函数是无法使用reified的,因为它能判断在运行时表示的类型。这种时候还需要老老实实的使用反射来实现。

举例

1.startActivity

inline fun <reified T : Activity> Activity.startActivity() {
    startActivity(Intent(this, T::class.java))
}

//直接调用Activity即可
startActivity<TargetActivity>()

2.findViewById

inline fun<T :View> Activity.findView(id: Int) = findViewById(id) as T


val textView = activity.findView<TextView>(R.id.tv)

相关文章

网友评论

    本文标题:Kotlin(1.1)学习笔记(12)——reified类型

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