Avatar ·

O que significa a palavra-chave out em Kotlin e como usá-la com genéricos?

Olá! Comecei a estudar Kotlin depois de Java e me deparei com uma construção que não entendo. Em Java, estou acostumado com genéricos usando wildcards como `? extends T` e `? super T`. Mas em Kotlin, vejo as palavras-chave `in` e `out` diretamente na declaração da classe. Por exemplo, encontrei este código: ```kotlin interface Source { fun get(): T } ``` O que significa `out` antes de `T`? Tentei escrever minha classe sem `out`: ```kotlin class Box(private val item: T) { fun get(): T = item fun set(newItem: T) { /* ... */ } } ``` E funciona. Mas se eu adicionar `out`, o compilador reclama do método `set`. Por quê? E para que serve `out`? Em quais situações devo usá-lo? Como isso se relaciona com o princípio PECS (Producer Extends, Consumer Super) do Java? Explique, por favor, com exemplos simples para que eu entenda quando e por que usar `out` em Kotlin. <<>>

O que é out em Kotlin: declaração de variância (declaration-site variance)

A palavra