Kotlin Fundamental - Enum Classes #5
Enumeration digunakan untuk menyimpan kumpulan objek/konstanta tertentu, bukan hanya objek/konstanta di dalamnya tetapi juga memiliki properti dan metode. Tidak sama seperti Java, pada Kotlin enum adalah kelas (class).
Enum meningkatkan keterbacaan kode dan lebih bersih sehingga meminimalisir kesalahan pada kode yang ditulis.
enum class Month{
JANUARI,
FEBRUARI,
MARET,
APRIL
}
Enum didefinisikan dengan menambahkan kata enum, setiap objek/konstanta pada Enum dipisahkan oleh koma.
Inisialisasi Enum
enum class Card(val color: String) {
GOLD(RED),
SILVER(BLUE),
BRONZE(GRAY)
}
Di Kotlin Enum juga memiliki konstruktor, seperti Java. Karena objek/konstanta Enum adalah turunan dari kelas Enum, maka objek/konstanta di inisialisasi dengan melewatkan nilai-nilai spesifik ke konstruktor utama seperti contoh di atas.
Kita dapat mengakses warna kartu dengan cara seperti ini:
val color = Card.GOlD.color
Enum sebagai Anonymous Clasess
Kita dapat mendefinisikan objek/konstanta Enum dengan menjadikannya sebagai anonymous classes (kelas anonim).
enum class CardType{
GOLD{
override fun limitCashback() = 0.5f
},
SILVER{
override fun limitCashback() = 0.3f
},
BRONZE{
override fun limitCashback() = 0.1f
}; abstract fun limitCashback():Float
}
Kita dapat memanggilnya dengan mudah seperti ini:
val cashbackLimit = CardType.GOLD.limitCashback()
Konstanta kemudian perlu mengganti fungsi abstrak yang didefinisikan dalam Enum, terlihat seperti contoh di atas fungsi limitCashback di override pada setiap objek/konstanta Enum.
Implementasi Interface pada Enum
Enum dapat mengimplementasikan sebuah interface dengan menambahkan interface ke deklarasai kelas Enum.
interface ICashbackLimit{
fun getLimitCashback():int
}
Kemudian kelas Enum seperti ini:
enum class CardType : ICashbackLimit{
GOLD{
override fun getLimitCashback() = 50000
},
SILVER{
override fun getLimitCashback() = 30000
},
BRONZE{
override fun getLimitCashback() = 10000
}
Kita bisa memanggilnya dengan cara:
val cashbackLimit = CardType.GOLD.getLimitCashback()
Kesimpulan:
- Enum dapat menyimpan kumpulan objek/konstanta
- Enum meningkatkan keterbacaan dan meminimalisir kesalahan pada kode.
- Enum sebagai Anonymous Clasess
- Implementasi Interfaces pada Enum