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

在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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容