0Pricing
Java Academy · Pelajaran

Enum dengan Field dan Metode

Tambahkan field, konstruktor, dan metode ke enum untuk merangkum perilakunya.

Enum dengan Field dan Metode adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Enumerasi dengan Bidang dan Metode

Konstanta enumerasi dapat membawa data. Anda menambahkan bidang dengan mendeklarasikannya beserta konstruktor. Konstruktor tersebut secara otomatis bersifat privat.

Mendeklarasikan Bidang dalam Enumerasi

Setiap konstanta enumerasi memanggil konstruktor saat kelas dimuat. Nilai bidang ditetapkan sekali dan tidak dapat diubah (jika dideklarasikan final).

enum Planet {
    MERCURY(3.303e+23, 2.4397e6),
    VENUS  (4.869e+24, 6.0518e6),
    EARTH  (5.976e+24, 6.37814e6),
    MARS   (6.421e+23, 3.3972e6);

    private final double mass;    // kilograms
    private final double radius;  // meters

    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }

    public double mass()   { return mass; }
    public double radius() { return radius; }
}

Menambahkan Metode ke Enumerasi

Tipe enumerasi dapat berisi metode apa pun yang dapat Anda masukkan ke dalam kelas, termasuk properti hasil perhitungan.

enum Planet {
    EARTH(5.976e+24, 6.37814e6);
    // ... constructor and fields ...
    static final double G = 6.67300E-11;

    public double surfaceGravity() {
        return G * mass / (radius * radius);
    }

    public double surfaceWeight(double otherMass) {
        return otherMass * surfaceGravity();
    }
}

double earthWeight = 75.0;
double mass = earthWeight / Planet.EARTH.surfaceGravity();
for (Planet p : Planet.values())
    System.out.printf("Weight on %s: %.2f%n", p, p.surfaceWeight(mass));

Metode Abstrak pada Konstanta Enumerasi

Setiap konstanta dapat menyediakan implementasinya sendiri untuk metode abstrak yang dideklarasikan di dalam isi enumerasi.

enum Operation {
    PLUS  { public double apply(double x, double y) { return x + y; } },
    MINUS { public double apply(double x, double y) { return x - y; } },
    TIMES { public double apply(double x, double y) { return x * y; } },
    DIVIDE{ public double apply(double x, double y) { return x / y; } };

    public abstract double apply(double x, double y);
}

System.out.println(Operation.PLUS.apply(3, 4));   // 7.0
System.out.println(Operation.TIMES.apply(3, 4));  // 12.0

Enumerasi Berlabel String

Pola umum: berikan setiap konstanta label yang mudah dipahami manusia dan simpan label tersebut sebagai bidang.

enum UserRole {
    GUEST("Guest User"),
    MEMBER("Registered Member"),
    ADMIN("Administrator"),
    SUPERADMIN("Super Administrator");

    private final String label;

    UserRole(String label) { this.label = label; }

    public String label() { return label; }

    public static UserRole fromLabel(String lbl) {
        for (UserRole r : values())
            if (r.label.equalsIgnoreCase(lbl)) return r;
        throw new IllegalArgumentException(lbl);
    }
}

System.out.println(UserRole.ADMIN.label()); // Administrator

Enumerasi dengan Banyak Bidang

Enumerasi dapat memiliki bidang sebanyak yang diperlukan. Di sini, enumerasi mata uang menyimpan kode ISO dan simbol.

enum Currency {
    USD("US Dollar", "$"),
    EUR("Euro", "\u20ac"),
    GBP("British Pound", "\u00a3"),
    JPY("Japanese Yen", "\u00a5");

    public final String name;
    public final String symbol;

    Currency(String name, String symbol) {
        this.name = name;
        this.symbol = symbol;
    }

    public String format(double amount) {
        return String.format("%s%.2f", symbol, amount);
    }
}

System.out.println(Currency.EUR.format(99.99)); // \u20ac99.99

Mengganti toString()

Ganti toString() dalam enumerasi untuk mengembalikan representasi String khusus, bukan nama konstanta.

enum HttpMethod {
    GET, POST, PUT, PATCH, DELETE;

    @Override
    public String toString() {
        return name().toUpperCase();
    }

    public boolean hasBody() {
        return this == POST || this == PUT || this == PATCH;
    }
}

HttpMethod m = HttpMethod.POST;
System.out.println(m);            // POST
System.out.println(m.hasBody());  // true
System.out.println(HttpMethod.GET.hasBody()); // false

Enumerasi dengan Validasi

Konstruktor enumerasi dapat memvalidasi argumennya untuk mencegah status yang tidak valid.

enum DiscountTier {
    BRONZE(5), SILVER(10), GOLD(20), PLATINUM(30);

    public final int percentage;

    DiscountTier(int percentage) {
        if (percentage < 0 || percentage > 100)
            throw new IllegalArgumentException("Invalid: " + percentage);
        this.percentage = percentage;
    }

    public double apply(double price) {
        return price * (1 - percentage / 100.0);
    }
}

System.out.println(DiscountTier.GOLD.apply(100.0)); // 80.0

Pola Instans Tunggal Enumerasi

Enumerasi dengan satu konstanta adalah cara paling aman untuk menerapkan pola instans tunggal dalam Java — aman untuk serialisasi dan thread secara bawaan.

enum AppConfig {
    INSTANCE;

    private String dbUrl = "jdbc:postgresql://localhost/mydb";
    private int maxConnections = 20;

    public String getDbUrl() { return dbUrl; }
    public int getMaxConnections() { return maxConnections; }

    public void setDbUrl(String url) { this.dbUrl = url; }
}

// Access the singleton
AppConfig config = AppConfig.INSTANCE;
System.out.println(config.getDbUrl());

Enumerasi dalam Model Domain

Enumerasi banyak digunakan dalam model domain untuk merepresentasikan kategori yang aman tipe: status pesanan, metode pembayaran, tipe notifikasi, dan sebagainya.

enum PaymentMethod {
    CREDIT_CARD("Credit Card", true),
    DEBIT_CARD("Debit Card", true),
    PAYPAL("PayPal", false),
    CRYPTO("Cryptocurrency", false),
    BANK_TRANSFER("Bank Transfer", false);

    public final String displayName;
    public final boolean instantCharge;

    PaymentMethod(String displayName, boolean instantCharge) {
        this.displayName = displayName;
        this.instantCharge = instantCharge;
    }
}

Bidang Enumerasi vs Hasil Perhitungan

Bidang menyimpan data tetap; metode menghitung nilai dinamis. Gunakan bidang untuk data konstan, dan metode untuk nilai turunan.

enum DayType {
    MONDAY(false), TUESDAY(false), WEDNESDAY(false),
    THURSDAY(false), FRIDAY(false),
    SATURDAY(true), SUNDAY(true);

    private final boolean weekend;
    DayType(boolean weekend) { this.weekend = weekend; }

    public boolean isWeekend()  { return weekend; }
    public boolean isWeekday()  { return !weekend; }

    public static long weekdayCount() {
        return java.util.Arrays.stream(values())
            .filter(DayType::isWeekday).count();
    }
}
System.out.println(DayType.weekdayCount()); // 5

Pemeriksaan Singkat

Apa perbedaan antara konstruktor enumerasi dan konstruktor kelas biasa?

Rangkuman: Enumerasi dengan Bidang dan Metode

Hal-hal penting:

  • Tambahkan bidang dan konstruktor untuk membawa data pada setiap konstanta
  • Konstruktor enumerasi secara implisit bersifat privat
  • Metode abstrak memungkinkan setiap konstanta menyediakan implementasinya sendiri
  • Ganti toString() untuk nama tampilan khusus
  • Enumerasi dengan satu konstanta adalah implementasi instans tunggal terbaik
  • Enumerasi terintegrasi secara alami ke dalam model domain sebagai kategori yang aman tipe

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Enum dengan Field dan Metode” gratis?

Ya — teks lengkap “Enum dengan Field dan Metode” 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 “Enum dengan Field dan Metode”?

Tambahkan field, konstruktor, dan metode ke enum untuk merangkum perilakunya. 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 2 dari 4.

Berapa lama pelajaran “Enum dengan Field dan Metode” 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