Rumah > Java > javaTutorial > Apakah enum di Jawa?

Apakah enum di Jawa?

Mary-Kate Olsen
Lepaskan: 2025-01-03 00:17:08
asal
163 orang telah melayarinya

¿Qué son los enums en Java?

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:

  • Setiap enum secara dalaman dilaksanakan sebagai kelas menggunakan jenis kelas.
  • Setiap pemalar enum mewakili objek jenis enum.
  • Semua enum secara tersirat memanjangkan java.lang.Enum, kerana kelas hanya boleh melanjutkan daripada induk, enum tidak boleh melanjutkan dari kelas lain.
  • Setiap pemalar dalam enum secara tersirat daripada jenis awam statik akhir.
  • Ia boleh digunakan dalam struktur kawalan seperti suis.
  • Kaedah main() boleh diisytiharkan di dalam enum.
  • Kaedah toString() ditindih untuk mengembalikan nama pemalar.

Pengisytiharan enum

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, ...
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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) {}
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
// Enum declarado dentro de una clase
public class Main {
    public static void main(String[] args) {}

    enum Color {
        RED, GREEN, BLUE;
    }
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Untuk mengakses mana-mana pemalar enum, kita hanya perlu menggunakan nama enum diikuti dengan noktah dan nama pemalar.

Color color = Color.RED;
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Dapatkan pemalar daripada enum

Kita boleh mendapatkan semua pemalar enum menggunakan kaedah values(), yang mengembalikan tatasusunan dengan semua pemalar.

enum NombreEnum {
    CONSTANTE1, CONSTANTE2, CONSTANTE3, ...
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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) {}
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Gunakan enum pada suis

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;
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Atribut dan pembina dalam enum

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
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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.

Kaedah dalam enum

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);
}
Salin selepas log masuk

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, ...
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kaedah abstrak dalam enum

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) {}
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Antara muka dalam enum

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;
    }
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

EnumSet dan EnumMap

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;
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Contoh lengkap

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
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kesimpulan

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan