Java - Konstruktor Enum

Halo di sana, ahli penyihir Java masa depan! Hari ini, kita akan melakukan perjalanan yang menarik ke dunia Enum Java dan konstruktornya. Jangan khawatir jika anda baru dalam pemrograman; saya akan pandu anda melalui petualangan ini langkah demi langkah, sama seperti yang saya lakukan untuk pelbagai pelajar selama tahun tahun mengajar saya. Jadi, ambil minuman kesukaan anda, dapatkan keselesaan, dan mari kita melompat masuk!

Java - Enum Constructor

Apa itu Enum?

Sebelum kita berbicara tentang konstruktor Enum, mari kitaerti dahulu apa itu Enum. Pikirkan Enum (pendek dari enumeration) sebagai jenis kelas khas yang mewakili sekumpulan konstant. Ia seperti senarai nilai pra tentukan yang tidak berubah.

Bayangkan anda membuat permainan dengan tingkat kesukaran yang berbeza. Anda boleh menggunakan Enum untuk mewakili tingkat ini:

public enum TingkatKesukaran {
EASY,
MEDIUM,
HARD
}

Di sini, EASY, MEDIUM, dan HARD adalah konstant (atau anggota) dari Enum TingkatKesukaran kami.

Mengerti Konstruktor Enum

Sekarang kita tahu apa itu Enum, mari kita berbicara tentang konstruktornya. sama seperti kelas biasa, Enum juga boleh memiliki konstruktor! Konstruktor ini membolehkan kita untuk mengaitkan data tambahan dengan setiap konstant Enum.

Konstruktor Enum Asas

Mari tambahkan deskripsi kepada setiap tingkat dalam TingkatKesukaran Enum kita:

public enum TingkatKesukaran {
EASY("Untuk pemula"),
MEDIUM("Untuk pemain sederhana"),
HARD("Untuk pemain ahli");

private final String description;

TingkatKesukaran(String description) {
this.description = description;
}

public String getDescription() {
return description;
}
}

Dalam contoh ini:

  1. Kita telah menambah parameter String kepada setiap konstant Enum.
  2. Kita telah membuat medan description yang private.
  3. Kita telah definisikan konstruktor yang mengambil parameter String dan menetapkannya ke description.
  4. Kita telah menambah method getter untuk mengakses deskripsi.

Sekarang, mari lihat bagaimana kita boleh menggunakan Enum ini:

public class Game {
public static void main(String[] args) {
TingkatKesukaran level = TingkatKesukaran.MEDIUM;
System.out.println("Tingkat kesukaran dipilih: " + level);
System.out.println("Deskripsi: " + level.getDescription());
}
}

Output:

Tingkat kesukaran dipilih: MEDIUM
Deskripsi: Untuk pemain sederhana

Adakah itu keren? Kita telah menambah maklumat tambahan kepada konstant Enum kita!

Penggunaan Konstruktor Enum

Konstruktor Enum sangat berguna apabila anda mahu mengaitkan data dengan setiap konstant Enum. Berikut adalah beberapa kesan penggunaan umum:

  1. Menambah deskripsi: Seperti yang kita lihat dalam contoh TingkatKesukaran kita.
  2. Menetapkan nilai berangka: berguna untuk penyusunan atau pengiraan.
  3. Mengaitkan dengan objek lain: Anda boleh mengaitkan setiap konstant Enum dengan satu contoh kelas lain.

Mari lihat contoh lain di mana kita menetapkan nilai berangka kepada konstant Enum kita:

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

private final double mass;   // dalam kilogram
private final double radius; // dalam meter

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

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

// Konstan gravitasi universal (m3 kg-1 s-2)
public static final double G = 6.67300E-11;

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

Dalam contoh ini, kita telah membuat Enum Planet di mana setiap konstant memiliki massa dan radius. Kita sekarang boleh mengira gravitasi permukaan bagi setiap planet:

public class SolarSystem {
public static void main(String[] args) {
for (Planet p : Planet.values()) {
System.out.printf("Gravitasi permukaan di atas %s adalah %.2f m/s²%n",
p, p.surfaceGravity());
}
}
}

Output:

Gravitasi permukaan di atas MERCURY adalah 3.70 m/s²
Gravitasi permukaan di atas VENUS adalah 8.87 m/s²
Gravitasi permukaan di atas EARTH adalah 9.80 m/s²

Skop Konstruktor Enum

Sekarang, mari kita berbicara tentang skop konstruktor Enum. Ini adalah titik penting untuk diingat:

Konstruktor Enum selalu private, walaupun anda tidak mengklasifikasikannya sebagai begitu.

Ini berarti anda tidak boleh membuat contoh baru bagi jenis Enum di luar definisi Enum itu sendiri. Java melakukan ini untuk memastikan bahwa set konstant dalam Enum adalah tetap dan tidak boleh diubah di atas masa penampilan.

Enum dengan Konstruktor Private

Walaupun konstruktor Enum secara implisit private, adalah satu praktek baik untuk mengklasifikasikannya sebagai private secara eksplisit untuk kejelasan:

public enum Musim {
SPRING("Sejuk"),
SUMMER("Panas"),
AUTUMN("Dingin"),
WINTER("Berais");

private final String temperature;

private Musim(String temperature) {
this.temperature = temperature;
}

public String getTemperature() {
return temperature;
}
}

Enum dengan Konstruktor Package-private

Walaupun konstruktor Enum tidak boleh public, ia boleh menjadi package-private (pilihan akses modifier default). Ini membolehkan kelas lain di dalam paket yang sama untuk melihat konstruktor:

enum SambunganDatabase {
INSTANCE;

SambunganDatabase() {
// Menginisialisasi sambungan database
}

void connect() {
System.out.println("Tersambung ke database");
}
}

Dalam contoh ini, kita menggunakan Enum untuk melaksanakan corak singleton bagi sambungan database.

Kesimpulan

Tahniah! Anda baru saja membuka kuasa konstruktor Enum di Java. Ingat, Enum bukan hanya senarai konstant yang biasa; dengan konstruktor, mereka menjadi alat yang kuat untuk membuat objek yang kaya data dan jenis yang selamat.

Sebagai anda teruskan perjalanan Java anda, anda akan menemui banyak lagi fitur yang menarik untuk dijelajahi. Teruskan untuk mengkod, teruskan untuk belajar, dan yang paling penting, bersenang-senang! Mana tahu, mungkin suatu hari nanti anda akan menjadi orang yang mengajar Java kepada generasi pemrogram berikutnya.

Sebelum kita tutup, mari kita ringkaskan method utama yang tersedia untuk semua jenis Enum:

Method Keterangan
values() Mengembalikan array yang mengandungi semua konstant Enum
valueOf(String name) Mengembalikan konstant Enum dengan nama yang dinyatakan
name() Mengembalikan nama konstant Enum ini, tepat seperti yang diumumkan
ordinal() Mengembalikan ordinal konstant penyataan ini (posisinya dalam penyataan Enum, di mana konstant awal diberikan ordinal nol)
compareTo(E o) Membandingkan Enum ini dengan objek yang dinyatakan untuk urutan
equals(Object other) Mengembalikan true jika objek yang dinyatakan sama dengan konstant Enum ini
hashCode() Mengembalikan kesalahan hash untuk konstant Enum ini

Ingat, praktek membuat anda sempurna. Jadi, mari buat Enum anda sendiri, eksperimen dengan konstruktor, dan lihat apa yang dapat anda rakitkan yang menakjubkan. Selamat coding!

Credits: Image by storyset