我有这段代码:
// 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
是一个复杂的表达式
问题是什么?
答案 0 :(得分:19)
由于mMeshes
是var
属性,因此可以在mutableListOf(AiMesh())
的分配和pScene.mMeshes[0]
中的使用之间进行更改,这意味着不能保证不会 - 在使用网站上为null。
编译器强制执行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