Dalam Java enumerasi atau enum ialah jenis kelas khas yang mewakili sekumpulan pemalar (nilai tidak berubah), iaitu set tetap nilai yang tidak berubah dari semasa ke semasa , jadi semua nilai yang mungkin diketahui pada masa penyusunan, contohnya hari dalam minggu, bulan dalam tahun, warna, dsb.
Memandangkan enum ialah sejenis kelas, anda mungkin fikir kita perlu membuat instantiat untuk menggunakannya, namun, ini tidak perlu, walaupun ia mempunyai keupayaan yang sama seperti kelas biasa, seperti atribut, kaedah, pembina dan walaupun melaksanakan antara muka, satu-satunya pertimbangan ialah anda tidak boleh melaksanakan konsep pewarisan dalam enum. Objektif utamanya ialah untuk menentukan jenis data kami sendiri (Jenis Data Terbilang). Beberapa sifat untuk diserlahkan bagi enum ialah:
Kami boleh mengisytiharkan enum di dalam atau di luar kelas, atau dalam fail berasingan, tetapi tidak di dalam kaedah. Sintaks untuk mengisytiharkan enum adalah seperti berikut:
enum NombreEnum { CONSTANTE1, CONSTANTE2, CONSTANTE3, ... }
Mengikut kebiasaan, pemalar enum ditulis dengan huruf besar.
Biasanya baris pertama enum ialah pengisytiharan pemalar, diikuti dengan atribut, kaedah dan pembina jika perlu.
// Enum declarado fuera de una clase enum Color { RED, GREEN, BLUE; } public class Main { public static void main(String[] args) {} }
// Enum declarado dentro de una clase public class Main { public static void main(String[] args) {} enum Color { RED, GREEN, BLUE; } }
Untuk mengakses mana-mana pemalar enum, kita hanya perlu menggunakan nama enum diikuti dengan noktah dan nama pemalar.
Color color = Color.RED;
Ia mungkin tidak begitu perlu, tetapi jika kita perlu mendapatkan nama pemalar seperti yang diisytiharkan, kita boleh menggunakan kaedah name(), walaupun kadangkala ia ditinggalkan oleh kaedah toString() sekiranya kita memerlukan sesuatu yang lebih deskriptif .
System.out.println(Color.RED.name()); // RED System.out.println(Color.RED); // RED
Kita boleh mendapatkan semua pemalar enum menggunakan kaedah values(), yang mengembalikan tatasusunan dengan semua pemalar.
enum NombreEnum { CONSTANTE1, CONSTANTE2, CONSTANTE3, ... }
Sekiranya kita perlu mendapatkan pemalar berdasarkan namanya, sama ada kerana kita menerimanya sebagai input, kita memperolehnya daripada fail atau pangkalan data, kita boleh menggunakan kaedah valueOf(), kita hanya perlu mempertimbangkan bahawa ini kaedah adalah sensitif huruf besar-besaran, jadi jika nama tidak sepadan dengan mana-mana pemalar IllegalArgumentException akan dilemparkan.
// Enum declarado fuera de una clase enum Color { RED, GREEN, BLUE; } public class Main { public static void main(String[] args) {} }
Sebelum ini, kami melihat bagaimana kami boleh mendapatkan semua pemalar sebagai tatasusunan, jadi anda mungkin berfikir jika mungkin untuk mendapatkan indeks pemalar, jawapannya adalah ya, kami boleh menggunakan kaedah ordinal() untuk mendapatkan indeks pemalar, sama seperti dalam tatasusunan indeks bermula pada sifar.
// Enum declarado dentro de una clase public class Main { public static void main(String[] args) {} enum Color { RED, GREEN, BLUE; } }
Salah satu kelebihan menggunakan enum ialah kita boleh menggunakannya dalam struktur kawalan suis, yang membolehkan kita memudahkan kod dan menjadikannya lebih mudah dibaca.
Color color = Color.RED;
Setiap pemalar enum boleh mempunyai atribut tersuai, sama seperti dalam kelas biasa, hanya perlu mempertimbangkan bahawa mesti ada pembina yang memulakan atribut, dengan cara ini apabila memuatkan pemalar, ia akan menjadi dipanggil kepada pembina yang sepadan secara tersirat. Mengetahui bahawa setiap pemalar ialah objek jenis enum dalam perisytiharan, kita mesti lulus nilai atribut mengikut pembina.
System.out.println(Color.RED.name()); // RED System.out.println(Color.RED); // RED
Untuk enum ini kita mempunyai 3 pemalar, setiap satu dengan 3 atribut, nama, tahap dan perihalan, sebagai tambahan kepada atribut kod yang biasa untuk semua pemalar, tetapi ia tidak perlu dimulakan dalam pembina, kerana ia adalah nilai yang tetap. Setiap atribut boleh mempunyai pengubah akses yang berbeza, semuanya bergantung pada keperluan kita.
Memandangkan contoh sebelumnya, kita boleh membuat kesimpulan bahawa memandangkan setiap atribut adalah jenis peribadi, kita memerlukan cara untuk mengaksesnya, jadi kita boleh mengisytiharkan kaedah getter untuk setiap atribut.
Color[] colors = Color.values(); for (Color color : colors) { System.out.println(color); }
Kami juga boleh mengisytiharkan kaedah utiliti dalam enum, sebagai contoh, kaedah yang membolehkan kami memperoleh pemalar berdasarkan tahap. Anda hanya perlu mempertimbangkan bahawa kaedah itu mestilah statik, kerana kami tidak boleh membuat instantiat enum.
enum NombreEnum { CONSTANTE1, CONSTANTE2, CONSTANTE3, ... }
Kami telah melihat bagaimana untuk melaksanakan kaedah dalam enum, tetapi jika kita memerlukan setiap pemalar untuk melaksanakan kaedah secara berbeza, kita boleh mengisytiharkan kaedah abstrak dan setiap pemalar mesti melaksanakannya dengan caranya sendiri, memandangkan dengan ini sintaks berubah sedikit dalam pengisytiharan pemalar. Sebagai contoh, mari kita isytiharkan kaedah abstrak showPermissions() yang mencetak kebenaran setiap pemalar melalui konsol.
// Enum declarado fuera de una clase enum Color { RED, GREEN, BLUE; } public class Main { public static void main(String[] args) {} }
Enum boleh melaksanakan satu atau lebih antara muka, dengan cara yang sama seperti kelas biasa, ia hanya perlu memisahkan antara muka dengan koma.
// Enum declarado dentro de una clase public class Main { public static void main(String[] args) {} enum Color { RED, GREEN, BLUE; } }
Java menyediakan dua kelas untuk berfungsi dengan enum, EnumSet dan EnumMap, yang masing-masing lebih cekap daripada kelas HashSet dan HashMap, kerana ia direka bentuk untuk berfungsi dengan enum. EnumSet ialah koleksi elemen unik enum, manakala EnumMap ialah pelaksanaan Map yang menggunakan enum sebagai kunci.
Color color = Color.RED;
Kita telah pun melihat ciri-ciri enum yang berbeza, sekarang mari kita lihat contoh di mana kita menggunakan kesemuanya.
System.out.println(Color.RED.name()); // RED System.out.println(Color.RED); // RED
Enum ialah ciri yang sangat berguna dalam Java, kerana ia membolehkan kami menentukan jenis data kami sendiri, yang membantu kami menjadikan kod kami lebih mudah dibaca dan diselenggara, serta membolehkan kami bekerja dengan pemalar dengan lebih cekap. Walaupun ia bukan ciri baharu, adalah penting untuk mengetahui tentangnya dan mengetahui cara menggunakannya, kerana dalam banyak kes ia boleh membantu kami memudahkan kod kami.
Atas ialah kandungan terperinci Apakah enum di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!