由于表达复杂,Kotlin,智能演员是不可能的

时间:2016-11-15 14:43:57

标签: 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是一个复杂的表达式

问题是什么?

1 个答案:

答案 0 :(得分:19)

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