Sobes.tech
Middle

Ποια είναι τα χαρακτηριστικά της εργασίας με τις κλάσεις Enum στο Kotlin;

sobes.tech AI

Απάντηση από AI

Τάξη enum — είναι ένας ειδικός τύπος κλάσης που χρησιμοποιείται για την αναπαράσταση ενός συνόλου σταθερών.

Χαρακτηριστικά:

  • Ορισμός σταθερών: Κάθε σταθερά της enum είναι ένα παράδειγμα της enum κλάσης.
    enum class Color {
        RED, GREEN, BLUE
    }
    
  • Ιδιότητες και μέθοδοι: Οι enum κλάσεις μπορούν να έχουν ιδιότητες και μεθόδους. Κάθε σταθερά μπορεί να τις υλοποιεί διαφορετικά.
    enum class Status(val description: String) {
        SUCCESS("Η λειτουργία ολοκληρώθηκε με επιτυχία"),
        ERROR("Παρουσιάστηκε σφάλμα"),
        PENDING("Αναμονή")
    }
    
    enum class Direction {
        NORTH, SOUTH, EAST, WEST;
    
        fun getOpposite(): Direction {
            return when (this) {
                NORTH -> SOUTH
                SOUTH -> NORTH
                EAST -> WEST
                WEST -> EAST
            }
        }
    }
    
  • Ανώνυμες κλάσεις: Κάθε σταθερά της enum μπορεί να δηλωθεί με μια ανώνυμη κλάση που παρέχει τις δικές της υλοποιήσεις μεθόδων ή ιδιοτήτων.
    enum class State {
        IDLE {
            override fun signal() = READY
        },
        READY {
            override fun signal() = IDLE
        }; // Υποχρεωτικό το ερωτηματικό πριν από την δήλωση μελών της κλάσης
    
        abstract fun signal(): State
    }
    
  • Υλοποίηση διεπαφών: Η enum κλάση μπορεί να υλοποιεί διεπαφές.
    interface Printable {
        fun printName()
    }
    
    enum class Shape : Printable {
        CIRCLE {
            override fun printName() {
                println("Κύκλος")
            }
        },
        SQUARE {
            override fun printName() {
                println("Τετράγωνο")
            }
        }
    }
    
  • Ενσωματωμένες ιδιότητες: Κάθε σταθερά έχει ενσωματωμένες ιδιότητες name (το όνομα της σταθεράς ως συμβολοσειρά) και ordinal (η θέση της σταθεράς στην δήλωση, ξεκινώντας από το 0).
    enum class Priority {
        LOW, MEDIUM, HIGH
    }
    
    fun main() {
        println(Priority.MEDIUM.name)    // Εμφάνιση: MEDIUM
        println(Priority.HIGH.ordinal) // Εμφάνιση: 2
    }
    
  • Ενσωματωμένες συναρτήσεις:
    • enumValues<T>(): Επιστρέφει ένα Array όλων των σταθερών της enum.
    • enumValueOf<T>(name: String): Επιστρέφει τη σταθερά της enum με το δοσμένο όνομα. Ρίχνει IllegalArgumentException αν η σταθερά δεν βρεθεί.
    fun main() {
        val allPriorities = enumValues<Priority>()
        println(allPriorities.joinToString()) // Εμφάνιση: LOW, MEDIUM, HIGH
    
        val highPriority = enumValueOf<Priority>("HIGH")
        println(highPriority) // Εμφάνιση: HIGH
    }
    
  • Χρήση σε εκφράσεις when: Ιδανικό για χρήση σε when. Ο μεταγλωττιστής θα προειδοποιήσει αν δεν καλύπτονται όλες οι περιπτώσεις (όταν χρησιμοποιείται ως έκφραση με επιστρεφόμενη τιμή).
    fun processStatus(status: Status) {
        when (status) {
            Status.SUCCESS -> println("Επιτυχία")
            Status.ERROR -> println("Σφάλμα")
            Status.PENDING -> println("Αναμονή")
        }
    }
    

Οι enum στην Kotlin είναι πιο ισχυροί σε σύγκριση με αυτούς στην Java, επιτρέποντας την προσθήκη ιδιοτήτων, μεθόδων και υλοποίηση διεπαφών.