Enum to też klasa, czyli dalsze przygody z Kotlinem
Zostało mi jeszcze kilka poprawek do prezentacji na DevCrowd, a zatem tydzień wpisów krótkich trwa w najlepsze. Dziś jak wyglądają enumy w Kotlinie.
Typy wyliczeniowe, bo tak to się nazywa w cywilizowanym języku niecywilizowanych ludzi, pojawiły się w Jave 5 i oczywiście wprowadziły sporo zamieszania. W Kotlinie też są i to bardzo podobne.
Listing 1. Deklaracja
enum class Gender {
MALE, FEMALE
}
To co rzuca się w oczy jest dodatkowe słówko class. Po co ono tam to ja nie mam pojęcia. Oczywiście podobnie jak w Javie możemy umieścić pola w enumie:
Listing 2. Deklaracja z polami
enum class ColorScheme(val background: String) {
OPEN("#ffffff"),
READONLY("#ff0000"),
SECURED("#ffff00")
}
oraz metody. Zarówno abstrakcyjne jak i nieabstrakcyjne jak i oczywiście implementować interfejsy
Listing 3. Deklaracja z metodami
enum class ColorScheme(val background: String) : SecurityMarker {
OPEN("#ffffff"){
override fun mode(cell: Cell) {
cell.isDisable = false
cell.isVisible = true
}
},
READONLY("#ff0000"){
override fun mode(cell: Cell) {
cell.isDisable = true
cell.isVisible = true
}
},
SECURED("#ffff00"){
override fun mode(cell: Cell) {
cell.isDisable = true
cell.isVisible = false
}
};
abstract fun mode(cell: Cell):Unit;
fun color(cell: Labeled): Unit {
cell.setTextFill(Color.web(background));
}
}
Każdy enum posiada dodatkowo dwa pola name i ordinal reprezentujące nazwę i kolejność oraz metody valueOf oraz values, które pozwalają na pobieranie enuma ze stringa i zwracają wszystkie enumy.
Podsumowując, enumy w Kotlinie są bardzo, ale to bardzo podobne do tych z Javy. Praktycznie poza różnicami wynikającymi ze składni języka są identyczne.
ps. Kotlinem się bawię więc będzie dużo wpisów, ale nie mają one sensu jakiegoś tutoriala.