Enum dan method Enum
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Java di Coddy. Pelajaran 50 dari 87.
enum (enumerasi) adalah tipe class khusus yang mewakili sekumpulan konstanta tetap. Alih-alih menggunakan bilangan bulat atau string sembarang untuk mewakili opsi seperti hari dalam seminggu atau status pesanan, enum menyediakan nilai yang aman dari segi tipe dan mudah dibaca.
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Day today = Day.MONDAY;
System.out.println(today); // Mencetak: MONDAYEnum bukan sekadar konstanta: enum adalah class lengkap. Kamu bisa menambahkan field, constructor, dan method ke dalamnya:
enum Size {
SMALL(10), MEDIUM(20), LARGE(30);
private int price;
Size(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
}
System.out.println(Size.MEDIUM.getPrice()); // Mencetak: 20Setiap enum memiliki method bawaan yang berguna. Method values() mengembalikan array berisi semua konstanta, sedangkan valueOf() mengonversi string menjadi konstanta enum yang cocok. Method ordinal() mengembalikan posisi konstanta (dimulai dari 0):
for (Day d : Day.values()) {
System.out.println(d + " is at position " + d.ordinal());
}
Day day = Day.valueOf("FRIDAY"); // Mengubah string menjadi enumEnum ideal digunakan saat kamu memiliki sekumpulan nilai yang sudah diketahui dan tetap, yang tidak akan berubah saat program berjalan, sehingga kodemu lebih aman dan lebih ekspresif daripada menggunakan konstanta biasa.
Tantangan
MudahMari kita buat sistem pemesanan kedai kopi yang menunjukkan keunggulan enum dengan field, constructor, dan method. Kamu akan membuat enum CoffeeSize yang menyimpan informasi harga dan sistem untuk memproses pesanan pelanggan.
Kamu akan mengatur kodemu dalam tiga file:
CoffeeSize.java: Buat enum yang mewakili ukuran kopi beserta harganya. Enum-mu harus memiliki tiga konstanta:SMALL,MEDIUM, danLARGE, dengan harga masing-masing2.50,3.50, dan4.50.Setiap ukuran memerlukan field
priceprivate (double), constructor untuk menetapkan nilainya, dan methodgetPrice()untuk mengambil nilainya. Tambahkan juga methodgetDescription()yang mengembalikan string dengan format:[size name] - $[price](contohnya:SMALL - $2.5)Order.java: Buat class yang mewakili pesanan kopi. Order memiliki dua field private:customerName(String) dansize(CoffeeSize). Sertakan constructor untuk menginisialisasi kedua field tersebut dan getter untuk masing-masing field.Tambahkan method
getReceipt()yang mengembalikan string beberapa baris:Order for: [customerName] Size: [size description from getDescription()] Total: $[price from the size]Main.java: Hidupkan kedai kopimu! Kamu akan menerima dua input: nama pelanggan (String) dan nama ukuran (String seperti "SMALL", "MEDIUM", atau "LARGE").Pertama, gunakan
CoffeeSize.valueOf()untuk mengubah string ukuran menjadi konstanta enum yang sesuai. Buat Order dengan nama pelanggan dan ukuran tersebut, lalu cetak struknya.Setelah mencetak struk, cetak satu baris kosong, lalu tampilkan seluruh menu dengan melakukan iterasi melalui semua nilai
CoffeeSizemenggunakan methodvalues(). Untuk setiap ukuran, cetak deskripsinya pada baris terpisah.
Kamu akan menerima dua input secara berurutan: nama pelanggan dan nama ukuran (salah satu dari "SMALL", "MEDIUM", atau "LARGE").
Perhatikan bagaimana enum mencakup identitas ukuran dan harga yang terkait dengannya, jauh lebih rapi daripada menggunakan konstanta terpisah atau angka ajaib di seluruh kodemu!
Coba sendiri
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Baca input
String customerName = scanner.nextLine();
String sizeName = scanner.nextLine();
// TODO: Ubah sizeName menjadi enum CoffeeSize menggunakan valueOf()
// TODO: Buat Order dengan nama pelanggan dan ukuran
// TODO: Cetak struk
// TODO: Cetak baris kosong
// TODO: Tampilkan menu lengkap dengan mengiterasi semua nilai CoffeeSize
// Petunjuk: Gunakan CoffeeSize.values() untuk mendapatkan semua konstanta enum
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPClass dan ObjectKata Kunci thisMethodField (Atribut)Method KonstruktorOverloading KonstruktorRangkuman: Kalkulator Sederhana4Pewarisan
Pewarisan Dasar (extends)Kata Kunci superMethod Overriding (@Override)Rantai KonstruktorKelas ObjectPewarisan Tunggal dan BertingkatMengapa Tidak Ada Pewarisan Multi-KelasRangkuman: Hierarki Karyawan7method Khusus & class Object
method toString()equals() dan hashCode()method clone()compareTo() dan ComparableAntarmuka ComparatorUlasan: Pengurutan Kustom10Penanganan Exception dalam OOP
Hierarki class ExceptionException KustomError Checked vs UncheckedPola Try-with-ResourcesRekap: Pengguna Tervalidasi2Modifier Akses & Enkapsulasi
Ikhtisar Tingkat AksesMethod Getter dan SetterPenyembunyian InformasiKata Kunci finalUlasan: Pengelola Rekening Bank5Polimorfisme
Dasar method overloadingMethod overriding (Saat program berjalan)Upcasting dan downcastingOperator instanceofclass dan method abstrakUlasan: Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi vs PewarisanAgregasi vs Komposisiinner, nested, dan anonymous classEnum dan method Enumrecord (Java 16+)sealed class (Java 17+)11Pola Desain Bagian 1
Pengantar Pola DesainPola SingletonPola FactoryPola BuilderPola ObserverPola Strategy3property class dan Anggota Statis
Variabel Instance vs Statismethod StatisBlok StatisKonstanta (static final)Rangkuman: Penghitung dan Utilitas6Antarmuka & Kelas Abstrak
Pengantar AntarmukaMengimplementasikan AntarmukaImplementasi Beberapa AntarmukaDefault & Static pada AntarmukaKelas Abstrak vs AntarmukaAntarmuka FungsionalRekap: Sistem PembayaranLatihan sendiri: Compiler Java online