首页 > 解决方案 > 如何在 Kotlin 中安全地进行转换(无空转换)

问题描述

    for (i in position until effectList.size) {
        var holder = mRecyclerView.findViewHolderForAdapterPosition(i) as EffectsHolder
        holder.bindEffect(holder.effect, i)
    }

我的代码导致这样的空指针强制转换:

kotlin.TypeCastException: null cannot be cast to non-null type com.mobileer.androidfxlab.EffectsAdapter.EffectsHolder

因为mRecyclerView.findViewHolderForAdapterPosition(i)返回null。mRecyclerView.findViewHolderForAdapterPosition(i)仅当不为空时,如何有条件地强制转换?那我可以做holder?.bindEffect(holder.effect, i)

标签: kotlin

解决方案


Kotlin 允许您使用Safe (nullable) Cast Operator执行这样的转换:

val maybeString: String? = someObject as? String

所以在你的情况下,也许是这样的:

var holder = mRecyclerView.findViewHolderForAdapterPosition(i) as? EffectsHolder
holder?.bindEffect(holder?.effect, i)

推荐阅读