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