我有以下代码:
// allocate one mesh
pScene.mNumMeshes = 1
pScene.mMeshes = mutableListOf(AiMesh())
val pMesh = pScene.mMeshes[0]
其中
mMeshes
是类型的参数var mMeshes: MutableList<AiMesh>? = null,
编译器在最后一行抱怨,我尝试在其中声明
pMesh
有什么问题?
最佳答案
由于mMeshes
是var
属性,因此可以在mutableListOf(AiMesh())
的分配和pScene.mMeshes[0]
中的用法之间进行更改,这意味着在使用现场不保证它不会为空。
编译器执行null-safety,将pScene.mMeshes
视为可为空的MutableList<AiMesh>?
,并且不允许您将其用作MutableList<AiMesh>
(即,它无法安全地执行smart cast)。
为了解决这个问题,您可以简单地制作一个non-null assertion:
val pMesh = pScene.mMeshes!![0]
或者只是重复使用您放入列表中的值:
val pMesh = AiMesh()
pScene.mMeshes = mutableListOf(mesh)
// use `pMesh` below