Middle
Quais são as características de trabalhar com classes Enum em Kotlin?
sobes.tech IA
Resposta da IA
A classe enum é um tipo especial de classe usada para representar um conjunto de constantes.
Características:
- Definição de constantes: Cada constante de enumeração é uma instância da classe de enumeração.
enum class Color { RED, GREEN, BLUE } - Propriedades e métodos: Classes enum podem ter propriedades e métodos. Cada constante pode implementá-los de forma diferente.
enum class Status(val description: String) { SUCCESS("Operação bem-sucedida"), ERROR("Ocorreu um erro"), PENDING("Aguardando") } enum class Direction { NORTH, SOUTH, EAST, WEST; fun getOpposite(): Direction { return when (this) { NORTH -> SOUTH SOUTH -> NORTH EAST -> WEST WEST -> EAST } } } - Classes anônimas: Cada constante de enumeração pode ser declarada com uma classe anônima que fornece suas próprias implementações de métodos ou propriedades.
enum class State { IDLE { override fun signal() = READY }, READY { override fun signal() = IDLE }; // Ponto e vírgula obrigatório antes de declarar membros da classe abstract fun signal(): State } - Implementação de interfaces: A classe enum pode implementar interfaces.
interface Printable { fun printName() } enum class Shape : Printable { CIRCLE { override fun printName() { println("Círculo") } }, SQUARE { override fun printName() { println("Quadrado") } } } - Propriedades embutidas: Cada constante possui propriedades embutidas
name(nome da constante como string) eordinal(posição da constante na declaração, começando de 0).enum class Priority { LOW, MEDIUM, HIGH } fun main() { println(Priority.MEDIUM.name) // Saída: MEDIUM println(Priority.HIGH.ordinal) // Saída: 2 } - Funções embutidas:
enumValues<T>(): Retorna umArrayde todas as constantes na classe enum.enumValueOf<T>(name: String): Retorna a constante da classe enum com o nome dado. LançaIllegalArgumentExceptionse a constante não for encontrada.
fun main() { val allPriorities = enumValues<Priority>() println(allPriorities.joinToString()) // Saída: LOW, MEDIUM, HIGH val highPriority = enumValueOf<Priority>("HIGH") println(highPriority) // Saída: HIGH } - Uso em expressões
when: São ideais para uso emwhen. O compilador alertará se nem todas as ramificações estiverem cobertas (quando usado como expressão com valor de retorno).fun processStatus(status: Status) { when (status) { Status.SUCCESS -> println("Sucesso") Status.ERROR -> println("Erro") Status.PENDING -> println("Aguardando") } }
Enums em Kotlin são mais poderosos em comparação com seus análogos em Java, permitindo adicionar propriedades, métodos e implementar interfaces.