Middle
Jakie są cechy pracy z klasami Enum w Kotlin?
sobes.tech AI
Odpowiedź od AI
Klasa enum to specjalny typ klasy używany do reprezentowania zbioru stałych.
Cechy:
- Definicja stałych: Każda stała wyliczenia jest instancją klasy wyliczeniowej.
enum class Color { RED, GREEN, BLUE } - Właściwości i metody: Klasy enum mogą mieć właściwości i metody. Każda stała może je implementować na różne sposoby.
enum class Status(val description: String) { SUCCESS("Operacja zakończona sukcesem"), ERROR("Wystąpił błąd"), PENDING("Oczekuje") } enum class Direction { NORTH, SOUTH, EAST, WEST; fun getOpposite(): Direction { return when (this) { NORTH -> SOUTH SOUTH -> NORTH EAST -> WEST WEST -> EAST } } } - Klasy anonimowe: Każda stała wyliczenia może być zadeklarowana z klasą anonimową, która zapewnia własne implementacje metod lub właściwości.
enum class State { IDLE { override fun signal() = READY }, READY { override fun signal() = IDLE }; // Kropka i średnik są obowiązkowe przed deklaracją członków klasy abstract fun signal(): State } - Implementacja interfejsów: Klasa enum może implementować interfejsy.
interface Printable { fun printName() } enum class Shape : Printable { CIRCLE { override fun printName() { println("Koło") } }, SQUARE { override fun printName() { println("Kwadrat") } } } - Wbudowane właściwości: Każda stała ma wbudowane właściwości
name(nazwa stałej jako łańcuch) iordinal(pozycja stałej w deklaracji, zaczynając od 0).enum class Priority { LOW, MEDIUM, HIGH } fun main() { println(Priority.MEDIUM.name) // Wyjście: MEDIUM println(Priority.HIGH.ordinal) // Wyjście: 2 } - Wbudowane funkcje:
enumValues<T>(): Zwraca tablicę wszystkich stałych w klasie enum.enumValueOf<T>(name: String): Zwraca stałą klasy enum o podanej nazwie. RzucaIllegalArgumentException, jeśli stała nie zostanie znaleziona.
fun main() { val allPriorities = enumValues<Priority>() println(allPriorities.joinToString()) // Wyjście: LOW, MEDIUM, HIGH val highPriority = enumValueOf<Priority>("HIGH") println(highPriority) // Wyjście: HIGH } - Użycie w wyrażeniach
when: Idealne do użycia wwhen. Kompilator ostrzeże, jeśli nie wszystkie gałęzie są obsłużone (przy użyciu jako wyrażenie z wartością zwracaną).fun processStatus(status: Status) { when (status) { Status.SUCCESS -> println("Sukces") Status.ERROR -> println("Błąd") Status.PENDING -> println("Oczekiwanie") } }
Enumy w Kotlin są bardziej potężne w porównaniu do ich odpowiedników w Javie, pozwalając na dodawanie właściwości, metod i implementację interfejsów.