Lo que está fuera de palabra key en kotlin

No puedo entender y no pude encontrar el significado de la palabra key out en kotlin.

Puede verificar el ejemplo aquí:

List<out T> 

Si alguien puede explicar el significado de esto. Esto sera realmente apreciado.

Con esta firma:

 List<out T> 

Puedes hacerlo:

 val doubleList: List<Double> = listOf(1.0, 2.0) val numberList: List<Number> = doubleList 

lo que significa que T es covariante :

cuando un parámetro de tipo T de una class C es declarado out , C <Base> puede ser un supertipo de C <Derivado> .

Esto es un contraste con in , por ej.

 Comparable<in T> 

Puedes hacerlo:

 fun foo(numberComparable: Comparable<Number>) { val doubleComparable: Comparable<Double> = numberComparable // ... } 

lo que significa que T es contravariante :

cuando se declara un parámetro de tipo T de una class C , C <Derived> puede ser un supertipo de C <Base> .

Otra forma de recordarlo:

Consumidor en , Productor fuera .

ver Kotlin Generics Variance

Consulte el manual de kotlin

El tipo Kotlin List<out T> es una interfaz que proporciona operaciones de solo lectura como size, get, etc. Al igual que en Java, henetworkinga de Collection<T> y que a su vez henetworkinga de Iterable<T> . Los methods que cambian la list se agregan mediante la MutableList<T> . Este patrón también es válido para Set<out T>/MutableSet<T> y Map<K, out V>/MutableMap<K, V>

Y esto,

En Kotlin, hay una forma de explicar este tipo de cosas al comstackdor. Esto se llama varianza del sitio de statement: podemos anotar el parámetro de tipo T de Fuente para asegurarnos de que solo se devuelve (produce) de los miembros de Source<T> , y nunca se consume. Para hacer esto, proporcionamos el modificador de salida:

 > abstract class Source<out T> { > abstract fun nextT(): T } > > fun demo(strs: Source<String>) { > val objects: Source<Any> = strs // This is OK, since T is an out-parameter > // ... } 

La regla general es: cuando se declara fuera un parámetro de tipo T de una class C , puede ocurrir solo en position de salida en los miembros de C , pero a cambio C<Base> puede ser un supertipo de C<Derived> .

En "palabras inteligentes" dicen que la class C es covariante en el parámetro T , o que T es un parámetro de tipo covariante. Puedes pensar que C es un productor de T y NO un consumidor de T El modificador de salida se llama anotación de varianza y, dado que se proporciona en el sitio de statement de parámetro de tipo, hablamos de la varianza del sitio de statement. Esto está en contraste con la varianza del sitio de uso de Java donde los comodines en los usos de tipo hacen que los types sean covariantes.

 List<out T> is like List<? super T> 

y

 List<in T> is like List<? implements T> 

Por ejemplo, en Kotlin puedes hacer cosas como

  val value : List<Any> = listOf(1,2,3) //since List signature is List<out T> 
  • La API mobile de Vison no detecta ningún código QR
  • No se puede mantener el estado de vista seleccionado en BaseAdapter con Kotlin
  • ¿El comstackdor de Kotlin siempre conserva los nombres de los parameters en bytecode?
  • Evento táctil de interceptación y networkingirigirlo en function del estado del evento de movimiento
  • ¿Por qué algunos files de Kotlin muestran el ícono de candado?
  • Kotlin webview crash
  • Sumar un subset de numbers en una list
  • Divide el código Kotlin2JavaScript en varios modules maven
  • ¿Cómo diferenciar entre una reference de miembro llamable encuadernada y una function del mismo tipo en kotlin?
  • ¿Qué es un "receptor" en Kotlin?
  • Convierta Any a ArrayList en Kotlin, Retrofit