Java Academy · Pelajaran

Ungkapan switch dengan Enum

Gunakan ungkapan switch moden dengan enum untuk percabangan yang kemas dan menyeluruh.

Pelajaran 3 daripada 413 langkah

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 immediately

Ungkapan 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 immediately

Ungkapan 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: 4

Mengumpulkan 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 vacation

Mengembalikan 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));    // 72

Ungkapan 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); // #00FF00

Switch 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));  // false

Praktikal: 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); // Administrator

Semakan 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()
Percuma untuk bermula

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

  1. Mentakrifkan dan Menggunakan Enum
  2. Enum dengan Medan dan Kaedah
  3. Ungkapan switch dengan Enum
  4. EnumSet dan EnumMap
← Kembali ke Java Academy