Котлин, умный литье невозможно из-за сложного выражения

У меня есть этот код:

// 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 – сложное выражение

В чем проблема?

Поскольку mMeshes является свойством var , он может меняться между назначением mutableListOf(AiMesh()) и использованием в pScene.mMeshes[0] , а это означает, что на сайте использования он не будет недействительным.

Компилятор обеспечивает нулевую безопасность , рассматривая pScene.mMeshes как обнуляемый MutableList<AiMesh>? и не позволяя вам использовать его как MutableList<AiMesh> (т. е. он не может безопасно выполнять интеллектуальный MutableList<AiMesh> ).

Чтобы исправить это, вы можете просто сделать ненулевое утверждение :

 val pMesh = pScene.mMeshes!![0] 

Или просто повторно введите значение, указанное в списке:

 val pMesh = AiMesh() pScene.mMeshes = mutableListOf(mesh) // use `pMesh` below