Initialisierung von Eigenschaften in Kotlin: by lazy oder lateinit — was wählen?
Hallo zusammen! Ich habe gerade angefangen, Kotlin zu lernen, und bin auf ein Problem gestoßen. Ich schreibe eine kleine Anwendung und muss einige Klasseneigenschaften initialisieren, aber ihre Werte werden erst später bekannt – zum Beispiel nach dem Laden von Daten oder in `onCreate` für Android.
Ich kenne zwei Ansätze: `lateinit` und `by lazy`. Aber ich verstehe nicht, wann ich welches verwenden soll. Hier ist ein Beispiel meines Codes:
```kotlin
class MyActivity : AppCompatActivity() {
private lateinit var userName: String
private val userAge: Int by lazy {
fetchUserAge() // diese Methode kann später aufgerufen werden
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
userName = "John" // Initialisierung von lateinit
}
private fun fetchUserAge(): Int {
return 25
}
}
```
Das Problem ist, dass wenn ich `lateinit` für `userName` verwende, die IDE meckert, wenn ich versuche, es zu `val` zu machen. Aber `by lazy` funktioniert nur mit `val`. Außerdem habe ich gehört, dass `latei