Avatar ·

¿Qué significa la palabra clave out en Kotlin y cómo usarla con genéricos?

¡Hola! Empecé a estudiar Kotlin después de Java y me encontré con una construcción que no entiendo. En Java estoy acostumbrado a los genéricos con wildcards como `? extends T` y `? super T`. Pero en Kotlin veo las palabras clave `in` y `out` directamente en la declaración de la clase. Por ejemplo, me topé con este código: ```kotlin interface Source { fun get(): T } ``` ¿Qué significa `out` antes de `T`? Intenté escribir mi propia clase sin `out`: ```kotlin class Box(private val item: T) { fun get(): T = item fun set(newItem: T) { /* ... */ } } ``` Y funciona. Pero si agrego `out`, el compilador se queja del método `set`. ¿Por qué? ¿Y para qué sirve `out`? ¿En qué situaciones debería usarlo? ¿Cómo se relaciona esto con el principio PECS (Producer Extends, Consumer Super) de Java? Explíquenme, por favor, con ejemplos simples para que entienda cuándo y por qué usar `out` en Kotlin. <<>>

Qué es out en Kotlin: declaración de varianza (declaration-site variance)

La palabra clave