Kotlin,聪明的演员是不可能的,因为复杂的表达

我有这个代码:

// allocate one mesh pScene.mNumMeshes = 1 pScene.mMeshes = mutableListOf(AiMesh()) val pMesh = pScene.mMeshes[0] 

其中mMeshes是类型的参数

var mMeshes: MutableList<AiMesh>? = null,

编译器抱怨最后一行,我尝试声明pMesh

智能转换为MutableList<AiMesh>是不可能的,因为pScene.mMeshes是一个复杂的表达式

有什么问题?

由于mMeshes是一个var属性,因此它可以在mutableListOf(AiMesh())的赋值和pScene.mMeshes[0]的用法之间pScene.mMeshes[0] ,这意味着在使用的站点不能保证不为空。

编译器强制使用null-safety ,将pScene.mMeshes作为可空的MutableList<AiMesh>? 并且不允许你将它作为MutableList<AiMesh> (即它不能安全地执行智能转换 )。

要解决这个问题,你可以简单地做一个非null的断言 :

 val pMesh = pScene.mMeshes!![0] 

或者只是重用你放入列表中的值:

 val pMesh = AiMesh() pScene.mMeshes = mutableListOf(mesh) // use `pMesh` below