Java OOP | Enum

Java OOP | Enum

Enum in Java

Terkadang kita ingin menyimpan jenis-jenis nilai yang nilainya terbatas dan sudah ditentukan. Contohnya nilai hari(senin, selasa ...) jenis kelamin (pria, wanita) dan sebagai lainnya. Di java kita dapat menyimpan nilai tersebut didalam enum.

Enum adalah sama seperti class, yang dapat memiliki attribute, method dan constructor. Yang membedakannya adalah enum berisikan nilai constanta yang secara otomatis public static final dan enum tidak bisa dibuat menjadi object.

Di java saat kita membuat kelas enum maka secara otomatis akan extends kelas java.lang.Enum. Oleh karena itu kita tidak dapat mewarisi kelas lain, hanya dapat implements interface.

Sintaks dasar membuat enum

public enum CarName { TOYOTA, DAIHATSU, HONDA, MITSUBISHI, NISSAN, WULING,MERCEDES_BENZ; }

Sintak dasar mengakses nilai konstanta enum

System.out.println(CarName.TOYOTA); System.out.println(CarName.DAIHATSU);

Gunakanlah enum jika anda mengetahui nilai yang akan anda simpan tidak akan berubah.

Enum dapat kita terapkan didalam class atau didalam satu file terpisah.

public class Car { // membuat enum didalam kelas enum CarName { TOYOTA, DAIHATSU, HONDA, MITSUBISHI, NISSAN, WULING,MERCEDES_BENZ; } }

Example Enum In Java

Kita bisa membuat variable dengan tipedata enum. Berikut adalah contoh program enum.

public enum CarName { TOYOTA, DAIHATSU, HONDA, MITSUBISHI, NISSAN, WULING,MERCEDES_BENZ; } public class Car { // membuat variable dengan tipe enum private CarName carName; private long price; public Car(CarName carName, long price) { this.carName = carName; this.price = price; } public CarName getCarName() { return carName; } public long getPrice() { return price; } } public class Main { public static void main(String[] args) { // membuat object Car Car car1 = new Car(CarName.TOYOTA, 530_000_000); System.out.println("Car Name is : "+car1.getCarName()); System.out.println("Car Price : "+car1.getPrice()); } }

Output:

Car Name is : TOYOTA Car Price : 530000000

Enum juga sering diterapkan dalam switch case. Berikut contoh program.

public enum CarName { TOYOTA, DAIHATSU, HONDA, MITSUBISHI, NISSAN, WULING,MERCEDES_BENZ; } public class Car { private CarName carName; private long price; public Car(CarName carName, long price) { this.carName = carName; this.price = price; } public void buyCar() { // menggunakan enum dalam swicth case switch(carName) { case TOYOTA: System.out.println("You buy a car "+carName+" with price "+price); break; case HONDA: System.out.println("You buy a Car "+carName+" with price "+price); break; case DAIHATSU: System.out.println("You buy a Car "+carName+" with price "+price); break; case NISSAN: System.out.println("You buy a Car "+carName+" with price "+price); break; default: System.out.println("I don't buy that car..!"); break; } } } public class Main { public static void main(String[] args) { // membuat object Car Car car1 = new Car(CarName.HONDA, 530_000_000); car1.buyCar(); } }

Output:

You buy a Car HONDA with price 530000000

Constructor In Enum

Enum di java sama seperti kelas pada umumnya yang dapat memiliki method constructor. Namun perbedaannya constructor enum tidak boleh didefinisikan dengan access modifier public Hanya bisa private atau default. Karena tujuan enum bukan untuk dibuat object nya melainkan untuk di pakai secara langsung.

Sintaks dasar membuat constructor di enum

public enum CarName { TOYOTA, DAIHATSU, HONDA, MITSUBISHI, NISSAN, WULING,MERCEDES_BENZ; // membuat constructor di enum CarName(String carBrand) { } }
Catatan: saat membuat constructor di enum, maka semua opsi nilai constanta enum wajib memanggil method constructor tersebut.

Berikut adalah contoh program menggunakan constructor di enum

public enum CarName { // secara otomatis akan memanggil method constructor TOYOTA("Fortuner","All New Avanza","Vios"), DAIHATSU("New Sigra","New Ayla","New Xenia"), HONDA("Honda New Jazz", "Honda Brio", "Mobilio"), MITSUBISHI("Pajero Sport","Xpander"), NISSAN("Serena","Terra"), WULING("Almaz RS"), MERCEDES_BENZ("GLB-Class","A-Class"); // membuat attribute private String[] carBrand; // membuat method constructor CarName(String... carBrand) { this.carBrand = carBrand; } // membuat method getter public String[] getCarBrand() { return carBrand; } } public class Main { public static void main(String[] args) { // memanggil opsi nilai constanta enum CarName carname = CarName.TOYOTA; for(String car : carname.getCarBrand()) { System.out.print(car+" "); } } }

Output:

Fortuner All New Avanza Vios

Method Enum Class

Terdapat beberapa method yang tersedia dalam enum class yang bisa kita gunakan.

1. Method ordinal()

Method ordinal() digunakan untuk mengambil nilai posisiordinal dari nilai constanta enum. Method ini mengembalikan tipedataint primitive

CarName.TOYOTA.ordinal(); // return 0

2. Method compareTo()

Method compareTo() digunakan untuk membandingkan nilai constanta enum berdasarkan posisi ordinal. Method ini mengembalikan tipedata int primitive

CarName.MERCEDES_BENZ.compareTo(CarName.DAIHATSU) // return MERCEDES_BENZ.ordinal() - DAIHATSU.ordinal()

3. Method name()

Method name() digunakan untuk mengambil nilai constanta enum dalam bentuk String. Method ini cocok jika ingin mengkonversi enum to string.

CarName.TOYOTA.name() // return "TOYOTA"

4. Method values()

Method values() digunakan untuk mengelompokan opsi nilai constanta enum menjadi array dengan tipedata enum

CarName[] carName = CarName.values(); // return TipedataEnum[]