1. Latar belakang
Sebelum bahasa Java telah diperkenalkan, pola umum untuk menunjukkan tipe enum adalah mendeklarasikan satu set konstanta int. Kode yang kami gunakan untuk mendefinisikan sebelum menggunakan metode statis akhir publik adalah sebagai berikut, menggunakan 1 untuk mewakili musim semi, 2 untuk mewakili musim panas, 3 untuk mewakili musim gugur, dan 4 untuk mewakili musim dingin.
musim kelas publik {public static final int spring = 1; Publik Static Final Int Summer = 2; Public Static Final Int Autumn = 3; Public Static Final Int Winter = 4;}Metode ini disebut pola enumerasi int. Tapi apa yang salah dengan model ini? Kami telah menggunakannya begitu lama, jadi seharusnya tidak ada masalah. Biasanya kode yang kami tulis memperhitungkan keamanan, kemudahan penggunaan dan keterbacaannya. Pertama, mari kita pertimbangkan keamanan jenisnya. Tentu saja pola ini tidak aman tipe. Misalnya, kami merancang fungsi yang membutuhkan nilai tertentu di musim semi, musim panas, musim gugur dan musim dingin. Namun, dengan jenis int, kami tidak dapat menjamin bahwa nilai yang dilewati adalah legal. Kode terlihat seperti ini:
Private String getChineseSeason (int season) {stringBuffer hasil = stringBuffer baru (); switch (musim) {case season.spring: result.append ("spring"); merusak; case season.summer: result.append ("musim panas"); merusak; case season. merusak; case season.winter: result.append ("Winter"); merusak; default: result.append ("musim tidak ada di bumi"); merusak; } return result.toString (); } public void dosomething () {System.out.println (this.getChineseSeason (season.spring)); // Ini adalah skenario normal System.out.println (this.getChineseSeason (5)); // Ini adalah skenario abnormal, yang mengarah ke tipe masalah insesurity}}Program getchineseSeason (musim.spring) adalah metode yang kami harapkan untuk digunakan. Tetapi getchineseSeason (5) jelas bukan masalahnya, dan kompilasi sangat pasif. Kami tidak tahu apa yang terjadi saat runtime. Ini jelas tidak sesuai dengan jenis keamanan program Java.
Selanjutnya, mari kita pertimbangkan keterbacaan pola ini. Sebagian besar saat menggunakan enumerasi, saya harus nyaman untuk mendapatkan ekspresi string dari jenis enum. Jika kita mencetak konstanta enumerasi int, yang kita lihat adalah seperangkat angka, yang tidak terlalu berguna. Kami mungkin berpikir untuk menggunakan konstanta string alih -alih konstanta int. Meskipun memberikan string yang dapat dicetak untuk konstanta ini, ini menyebabkan masalah kinerja, karena bergantung pada operasi perbandingan string, jadi pola ini juga merupakan sesuatu yang tidak kita harapkan. Mempertimbangkan jenis keamanan dan keterbacaan program, kerugian dari pola enumerasi int dan string terungkap. Untungnya, sejak rilis Java 1.5, solusi alternatif lain telah diusulkan yang menghindari kelemahan dari pola enumerasi int dan string dan memberikan banyak manfaat tambahan. Itu adalah tipe enum. Bab -bab berikut akan memperkenalkan definisi, fitur, skenario aplikasi, dan kelebihan dan kerugian dari jenis enumerasi.
2. Definisi <BR /> Tipe enum mengacu pada jenis hukum yang terdiri dari satu set konstanta tetap. Di Java, kata kunci enum digunakan untuk menentukan jenis enum. Berikut ini adalah definisi tipe Java enum.
Musim enum publik {musim semi, musim panas, musim gugur, pentung;} 3. Fitur
Pernyataan Java yang mendefinisikan jenis enum sangat sederhana. Ini memiliki karakteristik berikut:
1) Gunakan kata kunci enum 2) Ketik nama, seperti musim 3) Serangkaian nilai yang diizinkan, seperti musim semi, musim panas, musim gugur, musim dingin, dan musim yang ditentukan di atas 4) pencacahan dapat didefinisikan secara terpisah dalam file atau tertanam di kelas Java lainnya.
Selain persyaratan dasar tersebut, pengguna memiliki beberapa opsi lain
5) Pencacahan dapat mengimplementasikan satu atau lebih antarmuka (antarmuka) 6) Variabel baru dapat didefinisikan 7) Metode baru dapat didefinisikan 8) Kelas yang bervariasi sesuai dengan nilai enumerasi tertentu dapat didefinisikan
4. Skenario aplikasi
Mengambil jenis keamanan yang disebutkan di latar belakang sebagai contoh, tulis ulang kode itu dengan jenis enum. Kodenya adalah sebagai berikut:
Musim enum publik {musim semi (1), musim panas (2), musim gugur (3), musim dingin (4); Kode int pribadi; musim pribadi (kode int) {this.code = kode; } public int getCode () {return code; }} kelas publik menggunakan time { / ** * Konversi musim bahasa Inggris menjadi musim Cina * @param season * @return * / public string getchineseSeason (musim musim) {stringBuffer hasil = stringBuffer baru (); sakelar (musim) {case spring: result.append ("[Cina: spring, enumeration constant:" + season.name () + ", data:" + season.getCode () + "]"); merusak; Case Autumn: result.append ("[Cina: musim gugur, konstanta enumerasi:" + season.name () + ", data:" + season.getCode () + "]"); merusak; Kasus Musim Panas: Hasil. Laporan ("[Cina: Musim Panas, Pencacahan Konstanta:" + Season.name () + ", data:" + season.getCode () + "]"); merusak; Kasus Musim Dingin: Hasil. Laporan ("[Cina: Musim Dingin, Konstanta Pencacahan:" + season.name () + ", data:" + season.getCode () + "]"); merusak; default: result.append ("musim tanpa bumi" + season.name ()); merusak; } return result.toString (); } public void dosomething () {for (season s: season.values ()) {System.out.println (getchineseSeason (s)); // Ini adalah skenario normal} //system.out.println(getchineseSeason(5)); // Kompiler sudah gagal di sini, yang memastikan tipe keselamatan} public static void main (string [] arg) {Useeason useeason = new exeason (); Useeason.dosomething (); }}[Cina: Musim Semi, Pencacahan Konstanta: Musim Semi, Data: 1] [Cina: Musim Panas, Pencacahan Konstanta: Musim Panas, Data: 2] [Cina: Musim Gugur, Pencacahan Konstanta: Musim Gugur, Data: 3] [Cina: Musim Dingin, Konstanta Pencacahan: Musim Dingin, Data: 4]
Berikut adalah pertanyaan, mengapa saya ingin menambahkan domain ke jenis enum? Tujuannya adalah untuk mengaitkan data dengan konstanta. Misalnya, 1 mewakili musim semi dan 2 mewakili musim panas.
5. Ringkasan
Jadi kapan Anda harus menggunakan enum? Setiap kali satu set konstanta tetap diperlukan, seperti hari -hari seminggu, musim tahun ini, dll. Atau kumpulan semua nilai yang dikandungnya sebelum kami menyusun. Pencacahan Java 1.5 dapat memenuhi persyaratan sebagian besar pemrogram, dan karakteristik ringkas dan mudah digunakannya sangat menonjol.
6. Penggunaan
Penggunaan 1: Konstan
Warna enum publik {merah, hijau, kosong, kuning}Penggunaan 2: Switch
Enum Signal {Green, Yellow, Red} Public Class Trafficlight {Signal color = Signal.red; public void change () {switch (color) {case red: color = sinyal.green; merusak; case yellow: color = sinyal.red; merusak; case green: color = sinyal.yellow; merusak; }}}Penggunaan 3: Tambahkan metode baru ke enum
Publik enum warna {merah ("merah", 1), hijau ("hijau", 2), kosong ("putih", 3), yello ("kuning", 4); // variabel anggota nama string pribadi; indeks int pribadi; // Metode Konstruk Private Color (Name String, INT INDEX) {this.name = name; this.index = index; } // Metode normal public static string getName (int index) {for (color c: color.values ()) {if (c.getIndex () == index) {return c.name; }} return null; } // Dapatkan set METODE PUBLIK PUBLIK GetName () {return name; } public void setName (name string) {this.name = name; } public int getIndex () {return index; } public void setIndex (int index) {this.index = index; }}Penggunaan 4: Metode untuk menimpa enumerasi
Publik enum warna {merah ("merah", 1), hijau ("hijau", 2), kosong ("putih", 3), yello ("kuning", 4); // variabel anggota nama string pribadi; indeks int pribadi; // Metode Konstruk Private Color (Name String, INT INDEX) {this.name = name; this.index = index; } // Metode Timpa @Override Public String ToString () {return this.index+"_"+this.name; }}Penggunaan 5: Menerapkan antarmuka
perilaku antarmuka publik {void print (); String getInfo (); } public enum warna mengimplementasikan perilaku {merah ("merah", 1), hijau ("hijau", 2), kosong ("putih", 3), yello ("kuning", 4); // variabel anggota nama string pribadi; indeks int pribadi; // Metode Konstruk Private Color (Name String, INT INDEX) {this.name = name; this.index = index; } // Metode antarmuka @Override Public String getInfo () {return this.name; } // Metode antarmuka @Override public void print () {System.out.println (this.index+":"+this.name); }}Penggunaan 6: Gunakan antarmuka untuk mengatur enumerasi
Public Interface Food {enum kopi mengimplementasikan makanan {black_coffee, decaf_coffee, latte, cappuccino} enum hidangan penutup mengimplementasikan makanan {buah, kue, gelato}}Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.