[JAVA] Zum ersten Mal Kotlin berühren - Enum Classes

Überblick

Inhalt

Grundlegende Definition - wie Java

enum class Weather {
  SUNNY, CLOUDY, RAINY
}

Initialisierung - Im Gegensatz zu Java

enum class Weather(val weather: String) {
  SUNNY("sunny"),
  CLOUDY("cloudy"),
  RAINY("rainy")
}

Name und Original - wie Java

println(Weather.CLOUDY.name) // CLOUNDY
println(Weather.CLOUDY.ordinal) // 1

valueOf () und values () - wie Java

println(Weather.valueOf("sunny".toUpperCase())) // SUNNY
for (weather: Weather in Weather.values()) {
  println(weather.name) // SUNNY CLOUDY RAINY
}

enumValues und enumValueOf () - Im Gegensatz zu Java

println(enumValueOf<Weather>("sunny".toUpperCase())) // SUNNY
print(enumValues<Weather>().joinToString { it.name }) // SUNNY, CLOUDY, RAINY

Jede Enum-Konstante kann im Gegensatz zu Java auch ihre eigene anonyme Klasse deklarieren

Realisiert mit Kotlin
fun main(args: Array<String>) {
    println(Weather.SUNNY.washingIndexName()) //Sehr trocken
    println(Weather.SUNNY.washingIndex()) // 5
}

enum class Weather(val weather: String) {
  CLOUDY("cloudy"){
      override fun washingIndex() = 3
      override fun washingIndexName() = "Trocken"
  },
  RAINY("rainy"){
      override fun washingIndex() = 1
      override fun washingIndexName() = "Raumtrocknung empfohlen"
  },
  SUNNY("sunny"){
      override fun washingIndex() = 5
      override fun washingIndexName() = "Sehr trocken"
  };
  
  abstract fun washingIndex(): Int
  abstract fun washingIndexName(): String
}

Codebestätigung: https://paiza.io/projects/DANyJNSE2ziwn6fqbmLzoQ

Main.kt:19:4: error: expecting ';' after the last enum entry or '}' to close enum class body
  }
Realisiert mit Java
import java.util.*;

enum Weather {
    SUNNY("sunny", 5, "Sehr trocken"),
    CLOUDY("cloudy", 3, "Trocken"),
    RAINY("rainy", 1, "Raumtrocknung empfohlen");
    
    private String value;
    private int index;
    private String name;
    
    Weather(String value, int index, String name) {
        this.value = value;
        this.index = index;
        this.name = name;
    }
    
    public String getValue() {
        return this.value;
    }
    
    public static int getWashingIndex(Weather weather) {
        for(Weather e : Weather.values()) {
            if (weather == e) {
                return e.index;
            }
        }
        return 0;
    }
    
        public static String getWashingIndexName(Weather weather) {
        for(Weather e : Weather.values()) {
            if (weather == e) {
                return e.name;
            }
        }
        return "Keiner";
    }
}

public class Main {
    public static void main(String[] args) throws Exception {
        System.out.println(Weather.getWashingIndexName(Weather.SUNNY)); //Sehr trocken
        System.out.println(Weather.getWashingIndex(Weather.SUNNY)); // 5
    }
}

Codebestätigung: https://paiza.io/projects/DANyJNSE2ziwn6fqbmLzoQ

Erweiterungsfunktion

fun Weather.umbrellaIndex(){
    val index = when(this){
        Weather.SUNNY -> 0
        Weather.CLOUDY -> 1
        Weather.RAINY -> 2
    }
    println(index)
}

fun main(args: Array<String>) {
    Weather.RAINY.umbrellaIndex(); // 2
}

Referenz

Recommended Posts

Zum ersten Mal Kotlin berühren - Enum Classes
Ich habe zum ersten Mal versucht, Docker zu berühren
Wie man Kotlin zum ersten Mal studiert ~ Teil 2 ~
Wie man Kotlin zum ersten Mal studiert ~ Teil 1 ~
Spring AOP zum ersten Mal
Einführung in Java zum ersten Mal # 2
Zum ersten Mal Java lernen [Einführung]
Wände von der ersten Rspec getroffen
Android Studio-Entwicklung zum ersten Mal (für Anfänger)
Zum ersten Mal lernen Java # 3 Ausdrücke und Operatoren
[Erster Beitrag] Geben Sie das Wort Ausverkauft für verkaufte Produkte aus
Lernnotiz beim ersten Lernen von Java (persönliches Lernnotiz)
Zusammenfassung der Punkte, die Java-Programmierer beim ersten Lesen der Kotlin-Quelle als rutschig empfinden
[Rails] Ich habe zum ersten Mal versucht, die button_to-Methode zu verwenden
Anfängerfreundliches Veröffentlichungsverfahren für Android-Apps, das um die erste Version kämpft⁈
Erstmaliges Modellieren von Digimon mit DDD Teil 1
Technische Ursachen und Gegenmaßnahmen für die Punkte, denen ich mit der ersten Android-App und Kotlin verfallen war