Ktoś z was może mi pomóc z tym małym problemem? Jestem bardzo nowy w programowaniu Kotlin i Android! Nie rozumiem, dlaczego ten fragment kodu zwraca mi następujący błąd:

class Catalog {
var musicList: List<Music> = ArrayList()
}

class Music{
    var id: String = ""
}

fun main(args: Array<String>) {  
    var test: Catalog
    test.musicList[0] = "1"  
}

BŁĄD:

Variable 'test' must be initialized

Co jest nie tak? Dziękuję wam wszystkim!

0
kwroot 22 marzec 2020, 20:07

2 odpowiedzi

Najlepsza odpowiedź

Musisz go utworzyć przed wywołaniem metody pobierającej musicList:

fun main(args: Array<String>) {  
    var test = Catalog()
    test.musicList[0] = "1"  
}

Ponadto, jeśli nie chcesz ponownie przypisywać wartości test, możesz zadeklarować ją jako val:

fun main(args: Array<String>) {  
    val test = Catalog()
    test.musicList[0] = "1"  
}

Po tym pojawią się inne 2 błędy:

  1. ponieważ List jest niezmienny, więc nie możesz użyć operatora [] do przypisania wartości

Aby go rozwiązać, możesz użyć MutableList zamiast List.

class Catalog {
    val musicList = mutableListOf<Music>()
}
  1. Nie masz elementu o indeksie 0, więc otrzymałeś wyjątek poza granicami. Aby go rozwiązać, możesz dodać swój element:
fun main(args: Array<String>) {  
    var test = Catalog()
    test.musicList += Music("1")  
}
2
Giorgio Antonioli 22 marzec 2020, 17:21

W Kotlinie zmienną można zainicjować na dwa sposoby.

  1. init z wartością domyślną, taką jak ... var temp: String = ""
  2. init ze słowem kluczowym lateinit (oznacza, że zainicjujesz później), np. ... lateinit var temp: String

W twoim przypadku nie używasz lateinit Więc musisz zainicjować zmienną z wartością domyślną

var test = Catalog()

Lub jeśli chcesz zainicjować jako null

var test:Catalog? = null
0
Chirag Bhuva 22 marzec 2020, 17:22