gratis descargar compiler kotlin

descargar - Diferencia entre "*" y "Cualquiera" en los genéricos de Kotlin



kotlin vs scala (2)

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

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

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


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

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 s, o una lista de Int s, o una lista de otra cosa. 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 obtener 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 continuación:

Además, List<*> puede contener objetos de cualquier tipo, pero solo ese tipo, por lo que puede contener Strings (pero solo Strings), mientras que List<Any> puede contener Strings e Integers y demás, todos en la misma lista.