В чем разница между get и вызовом в Котлин?

Я делаю игру с использованием библиотеки Kotlin + LibGDX.

Версия Котлина: 1.1.2-4

Версия LibGDX: 1.9.6

Как говорится в официальной документации

 "[] operation stands for calls to member functions get() and set()." 

Но, когда я пытаюсь запустить эту строку кода:

body.userData = animations[state[e].currentState]!!.keyFrames[frame]

Я получаю эту ошибку:

Exception in thread "LWJGL Application" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lcom.badlogic.gdx.graphics.g2d.TextureRegion;

Однако, когда я меняю [] на get ():

body.userData = animations[state[e].currentState]!!.keyFrames.get(frame)

Все становится хорошо.

PS: «frame» – это угол, преобразованный в Int.

UPD: я немного изменил код

 val animation: Animation = anim[e].animations[state[e].currentState]!! val tex = animation.keyFrames[frame] // Get exception on this line anyway body[e].body.userData = tex 

«E» – это отказ от Эшли. «Тело», «анимация» и «состояние» являются компонентами компонента Эшли.

Для тех, кто не знает, что такое LibGDX здесь, это ключевые слова класса анимации – это просто массив Java.

UPD 2: я заметил, что проблема возникает только тогда, когда я использую этот конструктор:

 Animation(float frameDuration, Array<? extends T> keyFrames) 

Похоже на интероперабельную проблему.

Ошибка кастинга Объект нельзя передать в TextureRegion

 public operator fun get(index: Int): T 

Возвращает элемент массива по указанному индексу kotlin.Array .

T[] keyFrames – это T[] keyFrames типа T в классе Animation .


Я объявил таким образом, что у меня нет исключения / исключения. :

 lateinit var ani:Animation<TextureRegion> ani = Animation(.1f,TextureRegion(Texture("badlogic.jpg"))) val y= ani.keyFrames.get(0) // -> y is a TextureRegion 

Заменяется оператором индексирования

 val x=ani.keyFrames[0] // -> x is a TextureRegion 

Затем назначьте body userData.

 val world = World(Vector2(10f,10f),false) val body = world.createBody(BodyDef()) body.userData = y // -> Either you use x or y you always get sprite var sprite=Sprite(body.userData as TextureRegion?)