Sobes.tech
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) e ordinal (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 um Array de todas as constantes na classe enum.
    • enumValueOf<T>(name: String): Retorna a constante da classe enum com o nome dado. Lança IllegalArgumentException se 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 em when. 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.