0Pricing
Java Academy · Pelajaran

Mendefinisikan dan Menggunakan Enum

Deklarasikan tipe enum, gunakan konstantanya, dan lakukan iterasi dengan values() serta ordinal().

Mendefinisikan dan Menggunakan Enum adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Mendefinisikan dan Menggunakan Enumerasi

Enumerasi adalah kelas khusus yang merepresentasikan sekumpulan konstanta tetap. Enumerasi aman tipe, mudah dibaca, dan lebih kuat daripada konstanta int statis.

Mendeklarasikan Enumerasi

Gunakan kata kunci enum untuk mendeklarasikan enumerasi. Setiap konstanta secara implisit merupakan public static final dan sebuah instans dari tipe enumerasi tersebut.

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
    FRIDAY, SATURDAY, SUNDAY
}

Day today = Day.WEDNESDAY;
System.out.println(today);          // WEDNESDAY
System.out.println(today.name());   // WEDNESDAY
System.out.println(today.ordinal()); // 2 (zero-based index)

Melakukan Iterasi dengan values()

EnumType.values() mengembalikan semua konstanta dalam urutan deklarasi. Gunakan ini untuk melakukan iterasi atau membuat menu.

enum Planet { MERCURY, VENUS, EARTH, MARS, JUPITER, SATURN, URANUS, NEPTUNE }

for (Planet p : Planet.values()) {
    System.out.println(p.ordinal() + ": " + p);
}
// 0: MERCURY
// 1: VENUS
// 2: EARTH
// ...

// Count constants
System.out.println(Planet.values().length); // 8

valueOf() dan Penguraian

Enum.valueOf(name) mengonversi String menjadi konstanta yang cocok. Akan melempar IllegalArgumentException jika tidak ditemukan.

enum Status { PENDING, ACTIVE, SUSPENDED, CLOSED }

String input = "ACTIVE";
Status s = Status.valueOf(input);
System.out.println(s); // ACTIVE

try {
    Status bad = Status.valueOf("UNKNOWN");
} catch (IllegalArgumentException e) {
    System.out.println("Invalid status: UNKNOWN");
}

// Safe parse pattern
static Status safeFrom(String name) {
    try { return Status.valueOf(name.toUpperCase()); }
    catch (IllegalArgumentException e) { return Status.PENDING; }
}

Menggunakan Enumerasi dalam switch

Enumerasi bekerja sempurna dalam pernyataan dan ekspresi switch. Ekspresi switch modern membuat pengarahan berdasarkan enumerasi menjadi ringkas dan menyeluruh.

enum OrderStatus { CREATED, PROCESSING, SHIPPED, DELIVERED, CANCELLED }

OrderStatus status = OrderStatus.SHIPPED;

String message = switch (status) {
    case CREATED     -> "Order received, awaiting payment";
    case PROCESSING  -> "Payment confirmed, preparing shipment";
    case SHIPPED     -> "On the way — track your package";
    case DELIVERED   -> "Delivered! Enjoy your order";
    case CANCELLED   -> "Order cancelled";
};
System.out.println(message); // On the way — track your package

Enumerasi dengan if/else

Gunakan == untuk membandingkan konstanta enumerasi — konstanta tersebut adalah instans tunggal, sehingga kesamaan referensi berfungsi dengan benar.

enum UserRole { GUEST, MEMBER, ADMIN, SUPERADMIN }

UserRole role = UserRole.ADMIN;

if (role == UserRole.ADMIN || role == UserRole.SUPERADMIN) {
    System.out.println("Access granted to admin panel");
} else {
    System.out.println("Access denied");
}

// Enum comparison: never use .equals() for enums
// == is correct and more readable

Enumerasi dalam Koleksi

Enumerasi dapat disimpan dalam koleksi standar. Gunakan EnumSet dan EnumMap untuk penyimpanan berbasis enumerasi berperforma tinggi (dibahas dalam pelajaran berikutnya).

import java.util.*;

enum Permission { READ, WRITE, DELETE, ADMIN }

Set<Permission> userPerms = new HashSet<>();
userPerms.add(Permission.READ);
userPerms.add(Permission.WRITE);

System.out.println(userPerms.contains(Permission.DELETE)); // false
System.out.println(userPerms.contains(Permission.READ));   // true

List<Permission> allPerms = Arrays.asList(Permission.values());
System.out.println(allPerms.size()); // 4

Enumerasi Menerapkan Interface

Enumerasi dapat menerapkan interface, sehingga Anda dapat melampirkan perilaku ke setiap konstanta atau mendefinisikan kontrak umum untuk semua konstanta.

interface Describable {
    String describe();
}

enum Season implements Describable {
    SPRING, SUMMER, FALL, WINTER;

    public String describe() {
        return switch (this) {
            case SPRING -> "Mild and rainy";
            case SUMMER -> "Hot and sunny";
            case FALL   -> "Cool with falling leaves";
            case WINTER -> "Cold and snowy";
        };
    }
}

for (Season s : Season.values()) {
    System.out.println(s + ": " + s.describe());
}

Enumerasi sebagai Mesin Status

Enumerasi sangat cocok untuk mesin status. Setiap konstanta merepresentasikan suatu status, dan metode mendefinisikan transisi yang valid.

enum TrafficLight {
    RED, YELLOW, GREEN;

    public TrafficLight next() {
        return switch (this) {
            case RED    -> GREEN;
            case GREEN  -> YELLOW;
            case YELLOW -> RED;
        };
    }
}

TrafficLight light = TrafficLight.RED;
for (int i = 0; i < 6; i++) {
    System.out.println(light);
    light = light.next();
}
// RED, GREEN, YELLOW, RED, GREEN, YELLOW

Praktik Terbaik Enumerasi

Ikuti praktik terbaik berikut saat menggunakan enumerasi:

  • Gunakan nama ALL_CAPS untuk konstanta (sesuai konvensi)
  • Utamakan enumerasi daripada konstanta int atau String demi keamanan tipe
  • Gunakan ekspresi switch untuk pengarahan yang menyeluruh
  • Tambahkan bidang dan metode ke enumerasi ketika konstanta membawa data

Praktik: Kode Status HTTP

Enumerasi dunia nyata yang memodelkan kategori status HTTP dengan metode pabrik dari kode numerik.

enum HttpStatus {
    OK(200), CREATED(201), BAD_REQUEST(400),
    UNAUTHORIZED(401), NOT_FOUND(404), SERVER_ERROR(500);

    public final int code;

    HttpStatus(int code) { this.code = code; }

    public static HttpStatus from(int code) {
        for (HttpStatus s : values())
            if (s.code == code) return s;
        throw new IllegalArgumentException("Unknown HTTP code: " + code);
    }

    public boolean isSuccess() { return code >= 200 && code < 300; }
}

HttpStatus s = HttpStatus.from(404);
System.out.println(s + " (" + s.code + ") success=" + s.isSuccess());
// NOT_FOUND (404) success=false

Pemeriksaan Singkat

Apa keluaran dari kode berikut?

enum Color { RED, GREEN, BLUE }
System.out.println(Color.GREEN.ordinal());

Rangkuman: Mendefinisikan dan Menggunakan Enumerasi

Hal-hal penting:

  • Enumerasi mendefinisikan sekumpulan konstanta bernama yang tetap dengan keamanan tipe
  • values() melakukan iterasi pada semua konstanta; ordinal() memberikan indeks berbasis nol
  • valueOf() mengonversi String menjadi konstanta yang cocok
  • Gunakan == (bukan equals) untuk membandingkan instans enumerasi
  • Enumerasi bekerja sangat baik dalam ekspresi switch untuk pengarahan yang menyeluruh
  • Enumerasi dapat menerapkan interface untuk melampirkan perilaku pada setiap konstanta

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mendefinisikan dan Menggunakan Enum” gratis?

Ya — teks lengkap “Mendefinisikan dan Menggunakan Enum” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mendefinisikan dan Menggunakan Enum”?

Deklarasikan tipe enum, gunakan konstantanya, dan lakukan iterasi dengan values() serta ordinal(). Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Mendefinisikan dan Menggunakan Enum” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mendefinisikan dan Menggunakan Enum
  2. Enum dengan Field dan Metode
  3. Ekspresi Switch dengan Enum
  4. EnumSet dan EnumMap
← Kembali ke Java Academy