Puede ser útil pensar en la proyección de estrellas como una forma de representar no cualquier tipo, sino algún tipo fijo que no sabes qué es exactamente.
Por ejemplo, el tipo MutableList<*>
representa la lista de algo (no sabe exactamente qué). Entonces, si intenta agregar algo a esta lista, no tendrá éxito. Puede ser una lista de String
correos electrónicos, o una lista de Int
correos electrónicos, o una lista de algo más. El compilador no permitirá poner ningún objeto en esta lista porque no puede verificar que la lista acepte objetos de este tipo. Sin embargo, si intenta sacar un elemento de dicha lista, seguramente obtendrá un objeto de tipo Any?
, porque todos los objetos en Kotlin heredan de Any
.
Del comentario de asco a continuación:
Además, List<*>
puede contener objetos de cualquier tipo, pero solo ese tipo, por lo que puede contener cadenas (pero solo cadenas), mientras que List<Any>
puede contener cadenas y números enteros y todo eso, todo en la misma lista.