O que você sabe sobre o princípio da projeção estelar?
sobes.tech IA
Resposta da IA
O princípio de projeção de estrelas (Star Projection) em Kotlin é uma forma segura de usar genéricos quando o tipo específico do argumento não é importante, mas é necessário garantir a segurança de tipos.
Aplica-se nos seguintes casos:
-
*: Equivale aAny?. Indica que o tipo do argumento é desconhecido e não há informações sobre seus limites. Pode-se apenas ler elementos que sejam instâncias deAny?, e não se pode escrever nenhum, exceto null.// Leitura de uma lista com tipo desconhecido fun readFromList(list: List<*>) { val item: Any? = list.firstOrNull() // Pode-se ler com segurança como Any? } -
in *: Equivale ain Nothing. Usado para tipos covariantes (out), quando o tipo inferior específico não importa. Pode-se apenas adicionar elementos (tipo Nothing, o que é impossível), mas não pode-se ler.// Impossível adicionar elementos de forma segura a uma lista com tipo covariante fun addToList(list: MutableList<out *>) { // list.add(...) // Não compila } -
out *: Equivale aout Any?. Usado para tipos contravariantes (in), quando o tipo superior específico não importa. Pode-se apenas ler elementos (como Any?), mas não escrever.// Leitura de um comparador com tipo contravariante fun compare(comparator: Comparator<in *>) { // Pode chamar métodos que NÃO aceitam o tipo T // comparator.compare(obj1, obj2) // Não compilará sem conversão de tipos }
O objetivo principal das projeções de estrelas é a interação segura com classes e funções genéricas quando o tipo completo do argumento é desconhecido ou não relevante para a operação atual. Isso ajuda a evitar casts inseguros e a manter a segurança de tipos.
Exemplos de uso:
- Trabalhar com coleções onde apenas a existência de elementos importa, mas não seu tipo específico.
- Conversão de tipos para objetos genéricos.
- Interoperabilidade com código Java que usa tipos brutos.