¿Qué sabes sobre el principio de la proyección estelar?
sobes.tech AI
Respuesta de la IA
El principio de proyección de estrellas (Star Projection) en Kotlin es una forma segura de usar genéricos cuando no importa el tipo específico del argumento, pero se necesita garantizar la seguridad de tipos.
Se aplica en los siguientes casos:
-
*: Equivale aAny?. Indica que el tipo del argumento es desconocido y no hay información sobre sus límites. Solo se pueden leer elementos que sean instancias deAny?, y no se puede escribir ninguno, excepto null.// Lectura de una lista con tipo desconocido fun readFromList(list: List<*>) { val item: Any? = list.firstOrNull() // Se puede leer de forma segura como Any? } -
in *: Equivale ain Nothing. Se usa para tipos covariantes (out), cuando no importa el tipo inferior específico. Solo se pueden agregar elementos (tipo Nothing, lo cual es imposible), pero no se pueden leer.// Es imposible agregar elementos de forma segura a una lista con tipo covariante fun addToList(list: MutableList<out *>) { // list.add(...) // No compilará } -
out *: Equivale aout Any?. Se usa para tipos contravariantes (in), cuando no importa el tipo superior específico. Solo se pueden leer elementos (como Any?), pero no se pueden escribir.// Lectura de un comparador con tipo contravariante fun compare(comparator: Comparator<in *>) { // Se pueden llamar a métodos que NO aceptan el tipo T // comparator.compare(obj1, obj2) // No se compilará sin conversión de tipos }
El propósito principal de las proyecciones de estrellas es la interacción segura con clases y funciones genéricas cuando el tipo completo del argumento es desconocido o no relevante para la operación actual. Esto ayuda a evitar castings inseguros y a mantener la seguridad de tipos.
Ejemplos de uso:
- Trabajar con colecciones donde solo importa la existencia de elementos, pero no su tipo específico.
- Conversión de tipos para objetos genéricos.
- Interoperabilidad con código Java que usa tipos crudos.