我有以下代码:

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

其中mMeshes是类型的参数
var mMeshes: MutableList<AiMesh>? = null,
编译器在最后一行抱怨,我尝试在其中声明pMesh


有什么问题?

最佳答案

由于mMeshesvar属性,因此可以在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

10-08 06:23