CodeGym /Blog Jawa /Acak /Kelas Enum ing Jawa
John Squirrels
tingkat
San Francisco

Kelas Enum ing Jawa

Diterbitake ing grup
Hi! Ing artikel iki kita bakal nyritakake babagan Java Enums . Mbayangno yen sampeyan wis diwenehi tugas ing ngisor iki: nggawe kelas sing ngleksanakake dina minggu . Ing kawitan marketing, iki katon cukup prasaja. Kode sampeyan bakal katon kaya iki:

public class DayOfWeek {

   private String title;

   public DayOfWeek(String title) {
       this.title = title;
   }

   public static void main(String[] args) {
       DayOfWeek dayOfWeek = new DayOfWeek("Saturday");
       System.out.println(dayOfWeek);
   }

   @Override
   public String toString() {
       return "DayOfWeek{" +
               "title='" + title + '\'' +
               '}';
   }
}
Kabeh katon apik, nanging ana siji masalah: sampeyan bisa ngirim teks apa wae menyang konstruktor kelas DayOfWeek . Tegese wong bisa nggawe dina minggu sing jenenge "Frog", "Cloud" utawa "azaza322". Iki jelas dudu prilaku sing dikarepake, amarga mung ana 7 dina nyata ing minggu kasebut, lan saben wong duwe jeneng tartamtu. Mula, tugas kita yaiku mbatesi sawetara nilai sing bisa ditrapake kanggo kelas DayOfWeek . Sadurunge Java 1.5 teka, pangembang kudu nggawe solusi dhewe kanggo masalah iki, amarga basa kasebut ora duwe solusi sing wis siap. Ing dina iku, yen programer perlu kanggo matesi jumlah nilai, padha nindakake iki:

public class DayOfWeek {

   private String title;

   private DayOfWeek(String title) {
       this.title = title;
   }

   public static DayOfWeek SUNDAY = new DayOfWeek("Sunday");
   public static DayOfWeek MONDAY = new DayOfWeek("Monday");
   public static DayOfWeek TUESDAY = new DayOfWeek("Tuesday");
   public static DayOfWeek WEDNESDAY = new DayOfWeek("Wednesday");
   public static DayOfWeek THURSDAY = new DayOfWeek("Thursday");
   public static DayOfWeek FRIDAY = new DayOfWeek("Friday");
   public static DayOfWeek SATURDAY = new DayOfWeek("Saturday");

   @Override
   public String toString() {
       return "DayOfWeek{" +
               "title='" + title + '\'' +
               '}';
   }
}
Mangkene sing kudu digatekake:
  • Konstruktor iku pribadi. Yen konstruktor ditandhani karo modifier pribadi , iku ora bisa digunakake kanggo nggawe obyek. Lan amarga kelas kasebut mung duwe siji konstruktor, ora ana obyek DayOfWeek sing bisa digawe.

    
    	public class Main {
    
       		public static void main(String[] args) {
          
           			DayOfWeek sunday = new DayOfWeek(); // Error!
       		}
    }
    

  • Mesthine, kelas kasebut duwe jumlah obyek statis umum sing dibutuhake , sing diinisialisasi kanthi bener (nggunakake jeneng dina sing bener ing minggu kasebut).

    Iki ngidini obyek kasebut digunakake ing kelas liyane.

    
    	public class Person {
    
       		public static void main(String[] args) {
    
           			DayOfWeek sunday = DayOfWeek.SUNDAY;
    
           			System.out.println(sunday);
      		 }
    }
    

    Output:

    DayOfWeek{title = 'Minggu'}

Pendekatan iki umume ngatasi masalah kasebut. Kita duwe 7 dina seminggu, lan ora ana sing bisa nggawe sing anyar. Solusi iki ditawakake Joshua Bloch ing bukune Jawa Efektif . Miturut cara, buku kasebut keren banget lan kudu diwaca kanggo pangembang Java. Cara nggunakake kelas Enum - 2Kanthi rilis Java 1.5, basa kasebut entuk solusi sing wis siap kanggo kahanan kaya mangkene: Java Enums . Enum ing Jawa uga kelas. Iki khusus "dilarasake" kanggo ngrampungake masalah kaya iki, yaiku nggawe sawetara nilai sing winates. Pencipta Jawa wis duwe conto sing siap (contone, C wis duwe enum ), saengga bisa nggawe varian sing paling apik.

Dadi apa Java Enum?

Ayo deleng maneh conto DayOfWeek :

public enum DayOfWeek {

   SUNDAY,
   MONDAY,
   TUESDAY,
   WEDNESDAY,
   THURSDAY,
   FRIDAY,
   SATURDAY
}
Saiki katon luwih gampang :) Secara internal, Enum kita duwe 7 konstanta statis. Lan iku sing bisa digunakake kanggo ngleksanakake program. Contone, ayo nulis program sing nemtokake manawa siswa kudu sekolah dina iki. Siswa kita bakal duwe jadwal saben dina, diwakili dening kelas StudentSchedule :

public class StudentSchedule {

   private DayOfWeek dayOfWeek;
   // ... other fields


   public DayOfWeek getDayOfWeek() {
       return dayOfWeek;
   }

   public void setDayOfWeek(DayOfWeek dayOfWeek) {
       this.dayOfWeek = dayOfWeek;
   }
}
Variabel dayOfWeek obyek jadwal nemtokake dina dina iki. Lan iki kelas siswa kita:

public class Student {

   private StudentSchedule schedule;
   private boolean goToSchool;

   public void wakeUp() {
      
       if (this.schedule.getDayOfWeek() == DayOfWeek.SUNDAY) {
           System.out.println("Hooray, you can sleep more!");
       } else {
           System.out.println("Damn, time for school again :(");
       }
   }
}
Ing metode wakeUp () , kita nggunakake Java Enum kanggo nemtokake apa sing kudu ditindakake siswa sabanjure. Kita malah ora menehi katrangan bab saben lapangan ing DayOfWeek , lan kita ora perlu: iku ketok carane dina minggu kudu bisa. Yen digunakake ing wangun saiki, pangembang apa wae bakal ngerti apa sing kedadeyan ing kode kita. Conto liyane saka penak Enum iku konstanta bisa digunakake karo statement switch. Contone, ayo nulis program kanggo diet sing ketat, ing ngendi sajian dijadwalake saben dina:

public class VeryStrictDiet {
   public void takeLunch(DayOfWeek dayOfWeek) {
       switch (dayOfWeek) {
           case SUNDAY:
               System.out.println("Sunday Dinner! You can even enjoy something a little sweet today.");
               break;
           case MONDAY:
               System.out.println("Lunch for Monday: chicken noodle soup!");
               break;
           case TUESDAY:
               System.out.println("Tuesday, today it's celery soup :(");
               break;
               //... and so on to the end
       }
   }
}
Iki minangka salah sawijining kaluwihan Enums tinimbang solusi lawas sing digunakake sadurunge Java 1.5 — solusi lawas ora bisa digunakake nganggo switch . Apa maneh sampeyan kudu ngerti babagan Enum ? Enum punika kelas nyata karo kabeh kemungkinan sing entails. Contone, yen implementasine saiki dina minggu ora nyukupi, sampeyan bisa nambah variabel, konstruktor, lan metode menyang DayOfWeek :

public enum DayOfWeek {
  
   SUNDAY ("Sunday"),
   MONDAY ("Monday"),
   TUESDAY ("Tuesday"),
   WEDNESDAY ("Wednesday"),
   THURSDAY ("Thursday"),
   FRIDAY ("Friday"),
   SATURDAY ("Saturday");

   private String title;

   DayOfWeek(String title) {
       this.title = title;
   }

   public String getTitle() {
       return title;
   }

   @Override
   public String toString() {
       return "DayOfWeek{" +
               "title='" + title + '\'' +
               '}';
   }
}
Saiki konstanta Enum kita duwe kolom judhul , getter, lan metode toString sing diganti . Dibandhingake karo kelas biasa, siji watesan serius dilebokake ing Enum - ora bisa diwarisake. Kajaba iku, enumerasi duwe metode karakteristik:
  • values() : ngasilake array saka kabeh nilai ing Enum :

    
    public static void main(String[] args) {
       		System.out.println(Arrays.toString(DayOfWeek.values()));
    }
    

    Output:

    [DayOfWeek{title = 'Minggu'}, DayOfWeek{title = 'Senin'}, DayOfWeek{title = 'Selasa'}, DayOfWeek{title = 'Rebo'}, DayOfWeek{title = 'Kemis'}, DayOfWeek{title = 'Jum'}, DayOfWeek{title = 'Saturday'}]

  • ordinal () : ngasilake nomer ordinal saka konstanta. Nomer kasebut diwiwiti saka nol:

    
    	public static void main(String[] args) {
    
       		int sundayIndex = DayOfWeek.SUNDAY.ordinal();
       		System.out.println(sundayIndex);
    }
    

    Output:

    0

  • valueOf() : ngasilake obyek Enum sing cocog karo jeneng sing dilewati:

    
    public static void main(String[] args) {
       DayOfWeek sunday = DayOfWeek.valueOf("SUNDAY");
       System.out.println(sunday);
    }
    

    Output:

    DayOfWeek{title = 'Minggu'}

Cathetan:kita nggunakake huruf gedhe kanggo nemtokake kolom Enum . Iki minangka konstanta supaya padha nggunakake kabeh tutup tinimbang camelCase .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION