1. Latar belakang bagaimana enum
terjadinya
Hari ini kita akan mengeksplorasi tipe data lain di Java: enum
. Nama tersebut enum
berasal dari kata pencacahan . Apa tipe data ini dan untuk apa?
Terkadang seorang programmer perlu membuat tipe data baru, yang kemungkinan nilainya terbatas pada daftar kecil yang tetap.
Misalnya, sebuah DayOfTheWeek
tipe hanya dapat mengambil nilai MONDAY
, TUESDAY
, WEDNESDAY
, ... Total ada 7 nilai. Atau suatu Month
tipe hanya dapat mengambil nilai JANUARY
, FEBRUARY
, MARCH
, ... Total ada 12 nilai.
Tentu saja, Anda dapat menggunakan nomor ( int
tipe): 1
— Senin, 2
— Selasa, dll. Tetapi seseorang mungkin secara tidak sengaja menetapkan nilai yang tidak valid seperti 8
atau 0
ke variabel Anda.
Anda dapat dengan mudah mengalami situasi di mana seorang programmer menganggap hari dalam seminggu (atau bulan dalam setahun) diberi nomor mulai dari nol, sementara yang lain mengharapkan penomoran mereka dimulai dari satu, dll.
Itu sebabnya Java diperkenalkan enum
, tipe data yang terdiri dari kumpulan nilai yang terbatas .
2. Mendeklarasikan sebuah tipe
Mendeklarasikan tipe data baru enum
terlihat seperti ini:
enum TypeName
{
VALUE1,
VALUE2,
VALUE3
}
Di mana TypeName
nama tipe baru (kelas), dan nilai yang mungkin dipisahkan dengan koma dan dibungkus dengan kurung kurawal: Value1
, Value2
, Value3
.
Sebagai contoh, mari kita buat sendiri DayOfTheWeek
enum
:
Kode | Catatan |
---|---|
|
Day Tipe baru Senin Selasa Rabu Kamis Jumat Sabtu Minggu |
Inilah cara Anda menetapkan nilai ke variabel tipe baru kami:
Day day = Day.MONDAY;
Contoh:
Kode | Catatan |
---|---|
|
Output layar akan menjadi:
|
3. Metode anenum
Suatu enum
tipe memiliki beberapa metode bawaan, dua di antaranya sangat menarik:
Metode statis values()
mengembalikan array dari semua nilai tipe enum
:
Kode | Catatan |
---|---|
|
Variabel days menyimpan array yang berisi nilai tipe Day (7 elemen) Menampilkan konten array di layar:
|
Metode ordinal()
mengembalikan nomor urut konstanta. Anda menyebutnya pada enum
nilai daripada enum
kelas:
Kode | Keluaran konsol |
---|---|
|
|
4. Konversi ke kelas
Pada kenyataannya, tidak ada yang ajaib di sini. Kompiler baru saja memberi kami gula sintaksis. Pada waktu kompilasi, Day
enum diubah menjadi kelas biasa:
Kode, versi sederhana | Catatan |
---|---|
|
Day class Daftar konstanta statis Array dengan semua nilai enum Day Variabel yang menyimpan nilai Day objek tertentu Kelas bersifat privat, yang berarti objek kelas Day hanya dapat dibuat di dalam kelas. Metode harus dipanggil pada objek. Ini mengembalikan nilai objek — bidang . Metode mengembalikan array statis dengan semua nilai kelasconstructor Day Day ordinal Day value Day |
Jika kami menghapus semua metode dan variabel statis dari Day
kelas, kami mendapatkan yang berikut:
Kode | Catatan |
---|---|
|
Variabel value menyimpan nilai objek Day objek Day hanya dapat dibuat di dalam Day kelas, karena konstruktornya adalah private . Metode ordinal() mengembalikan value objek Day . |
Dengan kata lain, tidak ada hal menakutkan yang terjadi di sini. Kompiler membuat Day
kelas, menambahkan konstanta yang mewakili enum
nilai, menambahkan metode yang diperlukan, dan membuat konstruktor kelas private
. Kita akan melihat bagaimana konstruktor bekerja nanti.
Mudah-mudahan, sekarang sudah jelas mengapa kami menetapkan nilai ke variabel dengan cara ini:
Day day = Day.MONDAY;
MONDAY
hanyalah bidang statis (konstanta) di Day
kelas. Saat mengakses metode dan bidang statis dari luar kelas, Anda harus menunjukkan nama kelas sebelum nama bidang atau metode.
5. Lebih banyak metode anenum
Setiap enum
kelas memiliki beberapa fitur menarik.
Konversi ke dan dari string
Untuk mengonversi objek enum menjadi string, Anda perlu memanggil metodenya toString()
.
String str = Day.MONDAY.toString();
Untuk mengonversi ke arah lain (dari string ke Day
objek), Anda dapat menggunakan metode statis valueOf()
:
Day day = Day.valueOf("MONDAY");
Ini sangat nyaman dan akan sangat membantu dalam banyak kasus.
Konversi ke nomor dan kembali lagi
Anda sudah tahu cara mengonversi enum
objek menjadi angka: panggil ordinal()
metode:
int index = Day.MONDAY.ordinal();
Untuk mengonversi ke arah lain (dari angka ke objek Day
), Anda memerlukan konstruksi yang lebih transparan:
Day day = Day.values()[2];
Contoh:
Kode | Catatan |
---|---|
|
Senin Dapatkan indeks hari Senin: 0 Hari dalam seminggu 2 hari setelah Senin |
Poin penting: karena enum
nilai adalah kumpulan tetap dari konstanta, mereka dapat dibandingkan menggunakan == . Dengan kata lain, Anda tidak dapat memiliki dua MONDAY
objek identik dengan alamat yang berbeda. Hanya ada satu instance dari setiap nilai enum. Dan itu berarti membandingkan variabel enum menggunakan == akan selalu berhasil.
6. Menambahkan metode Anda sendiri ke anenum
Karena an enum
berubah menjadi kelas biasa pada waktu kompilasi, Anda dapat mendeklarasikan metode di dalamnya. Metode-metode ini hanya ditambahkan ke kelas yang dihasilkan oleh kompiler. Misalnya, kita ingin kita Day enum
mengembalikan daftar nilai enum daripada array.
Kemudian kita dapat menambahkan kode berikut:
Kode | Catatan |
---|---|
|
Titik koma diperlukan setelah daftar nilai. Buat ArrayList objek Tambahkan nilai dalam larik yang dikembalikan oleh values() metode. Kembalikan daftar. |
Sekarang metode ini dapat dipanggil dalam kode:
Kode | Catatan |
---|---|
|
Variabel list akan menyimpan daftar semua nilai dari Day enum . |
GO TO FULL VERSION