Equivalencia desde Kotlin
Genéricos y varianza
CercanaJava usa invariancia por defecto y expresa covarianza o contravarianza donde se consume la API: ? extends T para producir y ? super T para consumir.
Referencia Kotlin: Source<out T> es covariante y Sink<in T> es contravariante.
- Mecanismo
- wildcards
? extends Ty? super Ten el uso - Riesgo de diseño
- Usar
? extends Tpara una colección a la que se necesita agregar valores.
- Recomendación
- Aplica PECS: producer extends, consumer super; mantén separados los roles de fuente y destino.
Diferencias relevantes
- La varianza no se declara una vez en la interfaz como
outoinde Kotlin. - Los wildcards describen la relación en cada parámetro y conviene aplicar la regla PECS.
Source<T> produce valores y Sink<T> los consume sin mezclar ambas responsabilidades.
interface Source<T> { T get(); }
static Animal read(Source<? extends Animal> source) { return source.get(); }