Ungkapan switch dengan Enum
Gunakan ungkapan switch moden dengan enum untuk percabangan yang kemas dan menyeluruh.
Ungkapan switch dengan Enum ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Ungkapan Pemilihan dengan Enumerasi
Ungkapan pemilihan (Java 14+) dengan enumerasi menyediakan penghalaan berasaskan jenis yang meliputi semua kemungkinan dan ringkas. Apabila semua pemalar enumerasi diliputi, default tidak diperlukan.
Pernyataan Pemilihan Tradisional
Pernyataan pemilihan klasik berfungsi dengan enumerasi tetapi memerlukan break untuk menghalang pelaksanaan berterusan ke kes seterusnya.
enum Severity { LOW, MEDIUM, HIGH, CRITICAL }
Severity s = Severity.HIGH;
String action;
switch (s) {
case LOW:
action = "Log and monitor";
break;
case MEDIUM:
action = "Notify on-call team";
break;
case HIGH:
action = "Page engineer immediately";
break;
case CRITICAL:
action = "Activate incident response";
break;
default:
action = "Unknown";
}
System.out.println(action); // Page engineer immediatelyUngkapan Pemilihan dengan Label Anak Panah
Ungkapan pemilihan berlabel anak panah menghapuskan pelaksanaan berterusan ke kes seterusnya dan keperluan break. Ungkapan ini menilai kepada suatu nilai dan mesti meliputi semua kemungkinan.
enum Severity { LOW, MEDIUM, HIGH, CRITICAL }
Severity s = Severity.HIGH;
String action = switch (s) {
case LOW -> "Log and monitor";
case MEDIUM -> "Notify on-call team";
case HIGH -> "Page engineer immediately";
case CRITICAL -> "Activate incident response";
// no default needed — all cases covered
};
System.out.println(action); // Page engineer immediatelyUngkapan Pemilihan dengan Blok
Apabila logik kes memerlukan berbilang pernyataan, gunakan blok dengan yield untuk menghasilkan nilai hasil.
enum DayOfWeek { MON, TUE, WED, THU, FRI, SAT, SUN }
DayOfWeek day = DayOfWeek.FRI;
int hoursOpen = switch (day) {
case MON, TUE, WED, THU -> 8;
case FRI -> {
System.out.println("Half day on Friday!");
yield 4; // yield returns value from block
}
case SAT, SUN -> 0;
};
System.out.println("Hours open: " + hoursOpen); // Hours open: 4Mengumpulkan Beberapa Kes
Beberapa pemalar enum boleh berkongsi kes yang sama dengan dipisahkan menggunakan koma.
enum Season { SPRING, SUMMER, FALL, WINTER }
Season season = Season.SUMMER;
String activity = switch (season) {
case SPRING, FALL -> "Hike in the mountains";
case SUMMER -> "Beach vacation";
case WINTER -> "Ski at the resort";
};
System.out.println(activity); // Beach vacationMengembalikan Nilai daripada Kaedah dengan Switch
Ungkapan switch berfungsi dengan baik sebagai pernyataan return dalam kaedah kerana maksudnya lebih jelas.
enum Priority { LOW, NORMAL, HIGH, URGENT }
static int getSlaHours(Priority p) {
return switch (p) {
case LOW -> 72;
case NORMAL -> 24;
case HIGH -> 4;
case URGENT -> 1;
};
}
System.out.println(getSlaHours(Priority.URGENT)); // 1
System.out.println(getSlaHours(Priority.LOW)); // 72Ungkapan Switch dalam Stream
Ungkapan switch boleh digunakan dalam operasi stream untuk melakukan transformasi yang kemas bagi setiap elemen.
import java.util.*;
import java.util.stream.*;
enum Status { PENDING, ACTIVE, CLOSED }
record Account(String id, Status status) {}
List<Account> accounts = List.of(
new Account("A1", Status.ACTIVE),
new Account("A2", Status.PENDING),
new Account("A3", Status.CLOSED)
);
accounts.stream()
.map(a -> a.id() + ": " + switch (a.status()) {
case ACTIVE -> "\u2705 Live";
case PENDING -> "\u23f3 Awaiting activation";
case CLOSED -> "\u274c Deactivated";
})
.forEach(System.out::println);Kelengkapan pada Masa Kompilasi
Compiler memastikan semua pemalar enum diliputi. Menambahkan pemalar baharu kepada enum akan menyebabkan ralat kompilasi dalam semua ungkapan switch yang tidak mengendalikannya.
enum Color { RED, GREEN, BLUE } // add YELLOW here → compile error below
Color c = Color.GREEN;
// This switch is exhaustive for RED, GREEN, BLUE
// If you add YELLOW to the enum without adding a case here,
// the compiler will report an error.
String hex = switch (c) {
case RED -> "#FF0000";
case GREEN -> "#00FF00";
case BLUE -> "#0000FF";
};
System.out.println(hex); // #00FF00Switch dengan Kes Lalai demi Keselamatan
Apabila menggunakan pernyataan switch (bukan ungkapan), atau apabila switch sengaja hanya meliputi beberapa kes, tambahkan kes lalai.
enum Feature { DARK_MODE, PUSH_NOTIFICATIONS, ANALYTICS, BETA_FEATURE }
static boolean isEnabled(Feature feature) {
return switch (feature) {
case DARK_MODE, PUSH_NOTIFICATIONS -> true;
case ANALYTICS -> false;
default -> {
System.out.println("Unknown feature: " + feature);
yield false;
}
};
}
System.out.println(isEnabled(Feature.DARK_MODE)); // true
System.out.println(isEnabled(Feature.BETA_FEATURE)); // falsePraktikal: Kitar Hayat Pesanan
Mesin keadaan kitar hayat pesanan yang lengkap menggunakan ungkapan switch untuk menentukan peralihan yang dibenarkan.
enum OrderState { CART, PENDING, CONFIRMED, SHIPPED, DELIVERED, CANCELLED }
static Set<OrderState> allowedTransitions(OrderState from) {
return switch (from) {
case CART -> Set.of(OrderState.PENDING, OrderState.CANCELLED);
case PENDING -> Set.of(OrderState.CONFIRMED, OrderState.CANCELLED);
case CONFIRMED -> Set.of(OrderState.SHIPPED);
case SHIPPED -> Set.of(OrderState.DELIVERED);
case DELIVERED, CANCELLED -> Set.of(); // terminal states
};
}
System.out.println(allowedTransitions(OrderState.PENDING));
// [CONFIRMED, CANCELLED]Switch pada String berbanding Enum
Switch pada String memerlukan pemeriksaan null dan peka huruf besar-kecil. Switch pada enum selamat terhadap null (NPE jika null) serta selamat dari segi jenis — utamakan enum apabila set nilai telah diketahui.
// String switch — fragile
String role = "admin";
String label = switch (role.toLowerCase()) {
case "admin" -> "Administrator";
case "guest" -> "Guest User";
default -> "Unknown";
};
// Enum switch — type-safe
enum Role { ADMIN, GUEST }
Role r = Role.ADMIN;
String label2 = switch (r) {
case ADMIN -> "Administrator";
case GUEST -> "Guest User";
};
System.out.println(label2); // AdministratorSemakan Pantas
Anda mempunyai enum dengan 4 pemalar dan menulis ungkapan switch yang meliputi kesemuanya. Apakah yang berlaku jika anda menambahkan pemalar ke-5 kepada enum itu?
Imbas Kembali: Ungkapan Switch dengan Enum
Perkara penting:
- Ungkapan switch berlabel anak panah menghapuskan keperluan untuk break dan peralihan automatik ke kes seterusnya
- Gunakan yield untuk mengembalikan nilai daripada kes berbentuk blok
- Kumpulkan beberapa pemalar dengan koma: case A, B ->
- Ungkapan switch yang lengkap tidak memerlukan default apabila semua pemalar telah diliputi
- Menambahkan pemalar enum baharu akan menyebabkan ralat kompilasi dalam ungkapan switch yang lengkap
- Ungkapan switch sangat berguna dalam operasi stream map()
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Ungkapan switch dengan Enum” percuma?
Ya — teks penuh “Ungkapan switch dengan Enum” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Ungkapan switch dengan Enum”?
Gunakan ungkapan switch moden dengan enum untuk percabangan yang kemas dan menyeluruh. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Ungkapan switch dengan Enum” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mentakrifkan dan Menggunakan Enum
- Enum dengan Medan dan Kaedah
- Ungkapan switch dengan Enum
- EnumSet dan EnumMap