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

ele*_*ect 17 kotlin

我有这个代码:

// allocate one mesh
pScene.mNumMeshes = 1
pScene.mMeshes = mutableListOf(AiMesh())
val pMesh = pScene.mMeshes[0]
Run Code Online (Sandbox Code Playgroud)

mMeshes类型参数在哪里

var mMeshes: MutableList<AiMesh>? = null,

编译器在最后一行抱怨,我试图声明 pMesh

聪明的演员MutableList<AiMesh>是不可能的,因为pScene.mMeshes是一个复杂的表达

有什么问题?

hot*_*key 25

由于mMeshes是一个var属性,它可以在赋值mutableListOf(AiMesh())和使用中进行更改pScene.mMeshes[0],这意味着它不能保证在使用站点不为null.

编译器强制执行null安全性,将其pScene.mMeshes视为可空,MutableList<AiMesh>?并且不允许您将其用作MutableList<AiMesh>(即它无法安全地执行智能转换).

要解决这个问题,您可以简单地进行非空断言:

val pMesh = pScene.mMeshes!![0]
Run Code Online (Sandbox Code Playgroud)

或者只是重复使用您放入列表中的值:

val pMesh = AiMesh()
pScene.mMeshes = mutableListOf(mesh)
// use `pMesh` below
Run Code Online (Sandbox Code Playgroud)

  • 或者使用类似`val pMesh = AiMesh().apply { pScene.mMeshes = mutableListOf(this) }` (2认同)