Avatar ·

Was bedeutet das Schlüsselwort out in Kotlin und wie verwendet man es mit Generics?

Hallo! Ich habe angefangen, Kotlin nach Java zu lernen, und bin auf eine für mich unverständliche Konstruktion gestoßen. In Java bin ich an Generics mit Wildcards wie `? extends T` und `? super T` gewöhnt. Aber in Kotlin sehe ich die Schlüsselwörter `in` und `out` direkt in der Klassendeklaration. Zum Beispiel bin ich auf diesen Code gestoßen: ```kotlin interface Source { fun get(): T } ``` Was bedeutet `out` vor `T`? Ich habe versucht, meine eigene Klasse ohne `out` zu schreiben: ```kotlin class Box(private val item: T) { fun get(): T = item fun set(newItem: T) { /* ... */ } } ``` Und es funktioniert. Aber wenn ich `out` hinzufüge, beschwert sich der Compiler über die Methode `set`. Warum? Und wofür wird `out` überhaupt benötigt? In welchen Situationen sollte man es anwenden? Wie hängt das mit dem PECS-Prinzip (Producer Extends, Consumer Super) aus Java zusammen? Bitte erklären Sie es anhand einfacher Beispiele, damit ich verstehe, wann und warum man `out` in Kotlin verwendet. <<>>

Was ist out in Kotlin: Deklarationsseitige Varianz (declaration-site variance)

Das Schlüsselwort