Diferencia entre "*" y "Cualquiera" en los generics de Kotlin

No estoy seguro de entender completamente la diferencia entre SomeGeneric<*> y SomeGeneric<Any> . Creo que "*" representa cualquier cosa (comodín) y "Cualquiera" representa el object del que TODOS los objects henetworkingan. Entonces parece que deberían ser lo mismo, pero no lo son?

Puede ser útil pensar en la proyección en estrella como una forma de representar no solo cualquier tipo, sino un tipo fijo que no se sabe exactamente qué es.

Por ejemplo, el tipo MutableList<*> representa la list de algo (no se sabe exactamente qué). Entonces, si intenta agregar algo a esta list, no tendrá éxito. Puede ser una list de String , o una list de Int , o una list de algo más. El comstackdor no permitirá poner ningún object en esta list porque no puede verificar que la list acepte objects de este tipo. Sin embargo, si intentas get un elemento de dicha list, seguramente obtendrás un object de tipo Any? , porque todos los objects en Kotlin henetworkingan de Any .

En el context que creo que implica, SomeGeneric<*> es equivalente a SomeGeneric<out Any?> . El equivalente de Java es SomeGeneric<? extends Object> SomeGeneric<? extends Object> .

La syntax llamada "proyecciones en estrella". Aquí están los documentos oficiales: https://kotlinlang.org/docs/reference/generics.html#star-projections

  • Kotlin cuando con valores múltiples no funciona cuando el valor es una vista de Android
  • El error "no debe ser nulo" en Kotlin
  • Comprador personalizado para las properties de los parameters de tipo
  • SupportfragmentManager se convierte en null android kotlin
  • ¿Cómo puedo ofuscar mi sdk codificado con kotlin (y deshacerme de Metadata)
  • La function de extensión no crea un nuevo object Observable
  • Clase de datos Kotlin de RealmObject
  • ¿Cómo puedo get una request web actual usando Vert.x Web?