Jawa Enum. Enumerasi di Jawa

By | November 15, 2022

Mangihin.com.

Selamat Membaca, semoga informasi ini bermanfaat dan dapat membantu anda.

Diperbarui 2022

Enum, juga disebut enumerasi atau tipe enumerasi, adalah tipe data yang ditentukan pengguna yang hanya dapat mengambil nilai yang ditentukan dalam daftar konstanta.

Enum dideklarasikan secara umum:

[modificadores] enum nombreEnum {VALOR1, VALOR2, VALOR3, ...}          

pengubah (opsional) dapat bersifat publik, pribadi, dilindungi selain statis.

menghitung adalah kata yang dicadangkan untuk mendefinisikan enum di Jawa.

nameEnum adalah nama dari tipe yang baru dibuat.

NILAI1, NILAI2, … adalah nilai-nilai yang dapat mengambil variabel yang dideklarasikan dari tipe ini.

Pencacahan dapat dideklarasikan di dalam atau di luar kelas tetapi tidak pernah di dalam metode.
Kita dapat mempertimbangkan untuk menggunakan tipe enumerasi ketika variabel program hanya dapat mengambil nilai tertentu.

Contoh:

enum DiaSemana {LUNES, MARTES, MIRCOLES, JUEVES, VIERNES, SABADO, DOMINGO};          
enum Nivel {ALTO, MEDIO, BAJO};                                                       
enum Direccion {NORTE, SUR, ESTE, OESTE};                                             

Secara konvensi, nilai enum biasanya ditulis dalam huruf besar karena merupakan konstanta.

Setelah tipe enum dibuat, sekarang kita dapat mendeklarasikan variabel.

Untuk mendeklarasikan variabel bertipe DayWeek kita menulis:

DiaSemana d;          

Variabel d hanya dapat mengambil salah satu nilai yang ditentukan dalam daftar nilai.

Untuk memberi nilai pada variabel kita akan melakukannya dengan menuliskan nameOfEnum.value;

Sebagai contoh:

d = DiaSemana.JUEVES;          

contoh dasar dari menggunakan tipe enumerasi:

Kami membuat enum yang disebut DayWeek, jika kami membuat proyek yang berisi beberapa kelas, hal yang normal adalah enum ditulis dalam file terpisah, dengan cara yang mirip dengan cara melakukannya dengan kelas.

Kami membuat kelas utama untuk menggunakannya:

public class EjemploEnum {

    public static void main(String[] args) {

        DiaSemana d; // declaramos una variable del tipo DiaSemana                                                

        d = DiaSemana.DOMINGO; //asignamos a d un valor
 
        //Ejemplo de if para comparar una variable de tipo enum con un valor
        if (d == DiaSemana.DOMINGO || d == DiaSemana.SABADO)  
            System.out.println("Estamos en fin de semana");
        else 
            System.out.println("An no ha llegado el fin de semana");

        //Ejemplo de uso de una variable de tipo enum en un switch                                                
        switch (d) {  
            case LUNES:
            case MARTES:
            case MIERCOLES:
            case JUEVES:
            case VIERNES:
                System.out.println("An no ha llegado el fin de semana");                                         
                break;
            default:
                System.out.println("Estamos en fin de semana");
        }
    }
}

Jenis yang disebutkan di Java jauh lebih kuat daripada padanannya dalam bahasa seperti C ++:

  • Enum di Jawa adalah Kelas
  • Setiap konstanta dalam enum adalah objek. Anda TIDAK BISA membuat objek baru dari enum. Semua objek kelas adalah objek yang muncul dalam deklarasi enum.
  • Menjadi kelas, enum dapat berisi atribut dan metode.
  • Semua kelas enum yang dibuat secara implisit mewarisi dari kelas Java Enum.
Algunos mtodos que se heredan de la clase Enum de Java:

ubi()

public final String name()

Mengembalikan String dengan nama konstanta yang dikandungnya seperti yang muncul dalam deklarasi enum.

urut()

public final int ordinal()

Mengembalikan bilangan bulat dengan posisi konstanta seperti yang dideklarasikan dalam enum. Konstanta pertama sesuai dengan posisi nol.

keString()

public String toString()

Mengembalikan String dengan nama konstanta yang dikandungnya seperti yang muncul dalam deklarasi enum.

Menimpa metode toString dari kelas Object.

sama dengan()

public final boolean equals(Object other)

Mengembalikan nilai benar jika dua enum sama.

Mengganti metode equals dari kelas Object.
Anda juga dapat memeriksa apakah dua enum sama menggunakan operator ==

dibandingkan dengan()

public final int compareTo(Enum other)

Itu membandingkan enum dengan yang diterimanya sesuai dengan urutan konstanta yang dinyatakan. Mengembalikan angka negatif, nol atau angka positif tergantung pada apakah objek lebih kecil dari, sama dengan atau lebih besar dari yang diterimanya sebagai parameter.

Hanya enumerasi dengan tipe yang sama yang dapat dibandingkan.

Nilai dari()

public static enumConstant valueOf(String s)

Mengembalikan konstanta yang cocok tepat dengan String yang diterimanya sebagai parameter.

public static enumConstant [] values()

Contoh Menggunakan metode ini, menggunakan enum WeekDay yang dibuat sebelumnya:


public static void main(String[] args) {
       DiaSemana dia; //declaracin de una variable tipo enum

       dia = DiaSemana.MIERCOLES; //Se le asigna un valor

       // dia.name() devuelve un String con el valor de la constante (MIERCOLES)
       System.out.println(dia.name());

       // da.toString() devuelve un String con el valor de la constante (MIERCOLES)                              
       System.out.println(dia.toString());

       // Devuelve un entero con la posicin que ocupa dentro del enum (2).
       System.out.println(dia.ordinal());   

       // Comprobar la igualdad mediante equals y ==
       if(dia.equals(DiaSemana.LUNES)){ //Esta condicin no se cumple
           System.out.println("El valor es LUNES");
       }
       if(dia.equals(DiaSemana.MIERCOLES)){ //Esta condicin se cumple
           System.out.println("El valor es MIERCOLES usando equals");
       }
       if(dia == DiaSemana.MIERCOLES){ //Esta condicin se cumple
           System.out.println("El valor es MIERCOLES usando ==");
       }

       //Se crea otra variable y se le asigna un valor 
       DiaSemana otroDia = DiaSemana.MARTES;

       // Comparamos las dos variables enum mediante compareTo
       // Se comparan segn el orden en el que se han declarado en el enum                                        
       // En este caso el if se cumple
       // dia contiene MIERCOLES y otroDia contiene MARTES
       // En la declaracin del enum MIERCOLES aparece despus de MARTES 
       // por lo tanto es mayor
       if (dia.compareTo(otroDia) > 0) { //Esta condicin se cumple: dia > otroDia 
            System.out.println(dia + " > " + otroDia);
       } else {
            System.out.println(dia + " <= " + otroDia);
       }
       //Mostrar todos los elementos del enum
       //el mtodo values() devuelve un array con todas las constantes del enum                                   
       for (DiaSemana d : DiaSemana.values()) {
            System.out.print(d + " ");
       }
}

Tetapkan nilai ke enum dari keyboard

Untuk tetapkan nilai ke variabel enum dari keyboard kita bisa melakukannya dengan beberapa cara. Beberapa dari mereka muncul dalam contoh berikut. Kami terus menggunakan enum DayWeek.

Contoh 1: Baca nilai bilangan bulat dengan keyboard dan beralih. Menurut nilai yang dimasukkan, konstanta yang sesuai ditugaskan ke enum.

Scanner sc = new Scanner(System.in);
int valor;
DiaSemana d = null;  //Asigno null para evitar el warning de NetBeans: la variable d                              
                     //podra no estar inicializada 
do {
    System.out.print("Introduce da de la semana del 1(Lunes) al 7(Domingo): ");
    valor = sc.nextInt();
} while (valor < 1 || valor > 7);

switch(valor){
       case 1: d = DiaSemana.LUNES;
               break;
       case 2: d = DiaSemana.MARTES;
               break;
       case 3: d = DiaSemana.MIERCOLES;                                                                           
               break;
       case 4: d = DiaSemana.JUEVES;
               break;
       case 5: d = DiaSemana.VIERNES;
               break;
       case 6: d = DiaSemana.SABADO;
               break;
       case 7: d = DiaSemana.DOMINGO;
               break;
}

Contoh 2: Sama seperti pada contoh sebelumnya tetapi menggunakan ifs bersarang.

Scanner sc = new Scanner(System.in);
int valor;
DiaSemana d;
do {
    System.out.print("Introduce da de la semana del 1(Lunes) al 7(Domingo): ");                                  
    valor = sc.nextInt();
} while (valor < 1 || valor > 7);
if(valor == 1){
   d = DiaSemana.LUNES;
}else if(valor == 2){
         d = DiaSemana.MARTES;
}else if(valor == 3){
         d = DiaSemana.MIERCOLES;
}else if(valor == 4){
         d = DiaSemana.JUEVES;
}else if(valor == 5){
         d = DiaSemana.VIERNES;                                                                                   
}else if(valor == 6){
         d = DiaSemana.SABADO;
}else{
      d = DiaSemana.DOMINGO;
}

Contoh 3: Baca String yang cocok tepat dengan nilai konstanta uan dari enum dan menggunakan metode Nilai dari untuk menetapkan nilai itu ke variabel enum.

Scanner sc = new Scanner(System.in);
DiaSemana d;
String dia;
System.out.print("Introduce da de la semana (LUNES, MARTES, ...): ");                                            
dia = sc.nextLine();
d = DiaSemana.valueOf(dia.toUpperCase());                                                                         

Jika dilakukan dengan cara ini, kita harus memastikan bahwa nilai yang telah dimasukkan pada keyboard sesuai dengan salah satu konstanta yang dideklarasikan di enum. Jika String yang dimasukkan pada keyboard tidak cocok dengan konstanta apa pun di enum, metodenya Nilai dari menyebabkan kesalahan eksekusi.



Contoh 4: Menggunakan metode nilai-nilai. Metode ini mengembalikan array dengan semua konstanta di enum. Dalam kasus eum DayWeek, kembalikan larik bertipe DayWeek berikut:

SENIN

SELASA

RABU

KAMIS

JUMAT

SABTU

MINGGU

0

1

dua

3

4

5

6

Nilai integer dimasukkan pada keyboard dan digunakan sebagai indeks array untuk mendapatkan konstanta.

Scanner sc = new Scanner(System.in);
DiaSemana d;                                                                                                      
int valor;
System.out.print("Introduce da de la semana del 1(Lunes) al 7(Domingo) ");                                       
valor = sc.nextInt();
d = DiaSemana.values()[valor - 1];          

Ini adalah pilihan terbaik ketika tipe enumerated memiliki banyak konstanta. Kami menghindari membuat sakelar atau bersarang jika rantai terlalu besar.

Penggunaan lanjutan dari jenis yang disebutkan

Di Jawa kita dapat mendeklarasikan konstanta enum yang terkait dengan suatu nilai.

Untuk ini, kelas enum harus memiliki atribut untuk setiap nilai yang terkait dengan konstanta dan konstruktor untuk menetapkan nilai.

Nilai-nilai tersebut diteruskan ke konstruktor saat konstanta dibuat.

Konstruktor harus memiliki akses pribadi atau paket. Itu tidak dapat dipublikasikan karena tidak ada lagi objek yang dapat dibuat dari enum.

Konstanta harus didefinisikan terlebih dahulu, sebelum atribut atau metode lainnya.

Ketika enum memiliki atribut atau metode, daftar konstanta harus diakhiri dengan titik koma.
Nilai yang terkait dengan konstanta diperoleh melalui metode get yang sesuai.
Jenis enum ini tidak boleh berisi metode set karena nilai yang terkait dengan konstanta ditetapkan dalam konstruktor saat dibuat dan tidak dapat lagi dimodifikasi.

Contoh penggunaan lanjutan dari jenis yang disebutkan

enum Harga berisi dua konstanta dengan nilai terkait. Nilai 100 dan 80 yang menyertai konstanta inilah yang diteruskan ke konstruktor.

//Declaracin del enum
public enum Precios { 
     PRECIONORMAL(100), PRECIOVIP(80);  //los valores se pasan al constructor                                     
     private double precio;
     private Precios(double p){
         precio = p;
     }
     public double getPrecio() {
         return precio;
     }
}
//Clase principal
public class Enum3 {  
    public static void main(String[] args) {
        Precios p = Precios.PRECIOVIP;     //precio = 80                                                          
        System.out.println(p.getPrecio()); //muestra 80
    }
}