kotlin - 用于安全施法的智能施法

标签 kotlin

kotlin 1.2.50

我正在做一个聪明的 Actor ,只是想知道这是否是正确的方法。如params.bottomMargin由代码编辑器突出显示为 Smart cast to android.support.v7.widget.RecyclerView.LayoutParams
    val child = parent.getChildAt(i)
    val params = child.layoutParams
    if(params is RecyclerView.LayoutParams) {
        val dividerTop = child.bottom + params.bottomMargin
        val dividerBottom = dividerTop + drawable.intrinsicHeight

        drawable.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom)
        drawable.draw(c)
    }

只是想知道我是否可以用上面的代码做更多的事情来转换 params to RecyclerView.LayouParams
提前谢谢了,

最佳答案

这是智能类型转换的正确用法。如果你想要一个替代方案,你也可以使用 when声明或安全转换,例如以下示例:

when (params) {
    is RecyclerView.LayoutParams -> { /* smart cast here */ }
    else -> { /* optional other cases */ }
}

// casts to RecyclerView.LayoutParams? and then invokes the body of let if not null (when params is a RecyclerView.LayoutParams)
(params as? RecyclerView.LayoutParams)?.let {
     /* smart cast here */
}

关于kotlin - 用于安全施法的智能施法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52170112/

相关文章:

spring - 嵌套具体化参数无法创建 ParameterizedTypeReference

java - 如何使用kotlin从fifo文件中读取字符

android - 如何在 Kotlin 中将 setter 设为私有(private),用于非最终变量?

android - 不允许明文 http 流量

android - 如何在 Kotlin 中构建基于 MutableList 的列表?

Kotlin 在数据类中的副本是浅拷贝吗?

java - Android kotlin accountkit - 无法正常工作

node.js - Kotlin多平台node.js项目由于 “Error: Cannot find module '而失败…'”

java - 是否有一种标准方法可以将 Kotlin 序列转换为 java.util.Enumeration?

android - Kotlin Android - 我的 fragment 中的数据绑定(bind)失败