JavaRush /Blog Jawa /Random-JV /Enum ing Jawa: carane nggunakake kelas

Enum ing Jawa: carane nggunakake kelas

Diterbitake ing grup
Hello! Ing artikel iki aku bakal ngandhani babagan Java Enums. Mbayangno yen sampeyan wis diwenehi tugas: nggawe kelas sing ngleksanakake dina minggu . Sepisanan, ora ana sing rumit babagan iki, lan 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 + '\'' +
               '}';
   }
}
Lan kabeh katon apik, nanging ana siji masalah: sampeyan bisa ngirim teks apa wae menyang konstruktor kelas DayOfWeek . Kanthi cara iki, wong bisa nggawe dina minggu "Frog", "Cloud" utawa "azaza322". Iki cetha ora prilaku kita nyana, amarga ana mung 7 dina nyata minggu, lan saben wong duwe jeneng. Mula, tugas kita yaiku mbatesi sawetara nilai sing bisa ditrapake kanggo kelas " dina minggu ". Sadurunge Java 1.5, pangembang kepeksa nggawe solusi kanggo masalah iki dhewe, amarga ora ana solusi sing wis siap ing basa kasebut. Ing dina iku, yen kahanan mbutuhake nomer winates saka 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 + '\'' +
               '}';
   }
}
Apa sampeyan kudu menehi perhatian ing kene:
  • Konstruktor pribadi. Yen konstruktor ditandhani karo modifier pribadi , obyek saka kelas ora bisa digawe nggunakake konstruktor kasebut. Lan amarga mung ana siji konstruktor ing kelas iki, obyek DayOfWeek ora bisa digawe kabeh.

    public class Main {
    
       		public static void main(String[] args) {
    
           			DayOfWeek sunday = new DayOfWeek();//error!
       		}
    }
  • Ing wektu sing padha, kelas kasebut ngemot jumlah obyek statis umum sing dibutuhake sing diwiwiti kanthi cara sing dibutuhake (jeneng dina sing bener).

    Iki ndadekake iku bisa kanggo nggunakake obyek ing kelas liyane.

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

    Kesimpulan:

    DayOfWeek{title='Minggu'}

Pendekatan iki umume ngidini kita ngatasi masalah kasebut. Kita duwe 7 dina seminggu, lan ora ana sing bisa nggawe sing anyar. Solusi iki diusulake dening Joshua Bloch ing buku Jawa Efektif . Miturut cara, buku kasebut keren banget lan kudu diwaca kanggo pangembang Jawa.
Cara nggunakake kelas Enum - 2
Kanthi rilis Java 1.5, basa kasebut ngenalake solusi sing wis siap kanggo kahanan kaya ngono - enumerasi Enum . Enum uga kelas. Nanging khusus "dicocogake" kanggo ngatasi masalah sing padha karo kita: nggawe sawetara nilai winates tartamtu. Wiwit pangripta Jawa wis duwe conto siap-digawe (ujare, basa C, kang Enum wis ana), padha bisa nggawe pilihan optimal.

Apa iku enum?

Dadi, apa Enum ing Jawa ? Ayo ndeleng conto DayOfWeek sing padha :
public enum DayOfWeek {

   SUNDAY,
   MONDAY,
   TUESDAY,
   WEDNESDAY,
   THURSDAY,
   FRIDAY,
   SATURDAY
}
Wis katon luwih prasaja :) Nang Enum kita ana 7 konstanta kanthi akses statis. Kita wis bisa digunakake kanggo ngleksanakake logika ing program. Contone, ayo nulis program sing bakal nemtokake manawa siswa kudu sekolah dina iki. Siswa kita bakal duwe rutinitas saben dinane dhewe, sing ditunjuk dening kelas ScholarSchedule :
public class ScholarSchedule {

   private DayOfWeek dayOfWeek;
   //...other fields


   public DayOfWeek getDayOfWeek() {
       return dayOfWeek;
   }

   public void setDayOfWeek(DayOfWeek dayOfWeek) {
       this.dayOfWeek = dayOfWeek;
   }
}
Variabel dayOfWeek ing mode dina nemtokake dina apa. Lan iki kelas siswa kita:
public class Scholar {

   private ScholarSchedule schedule;
   private boolean goToSchool;

   public void wakeUp() {

       if (this.schedule.getDayOfWeek() == DayOfWeek.SUNDAY) {
           System.out.println("Hooray, you can sleep some more!");
       } else {
           System.out.println("Damn, back to school :(");
       }
   }
}
Ing wakeUp () cara , nggunakake Enum, kita nemtokake tumindak luwih mahasiswa. Kita malah ora njlèntrèhaké kanthi rinci apa tegese saben variabel ing DayOfWeek , lan iki ora perlu: mekanisme dina minggu wis ketok, lan yen kita nggunakake ing wangun saiki, pangembang bakal ngerti apa. kedadeyan ing kode sampeyan. Conto liyane sing nyenengake Enum yaiku konstanta bisa digunakake karo statement switch . Contone, kita nulis program kanggo diet sing ketat, ing ngendi dhaharan dijadwalake saben dina:
public class VeryStrictDiet {
   public void takeLunch(DayOfWeek dayOfWeek) {
       switch (dayOfWeek) {
           case SUNDAY:
               System.out.println("Sunday lunch! Today you can even have a little sweet");
               break;
           case MONDAY:
               System.out.println("Monday Lunch: Chicken Noodles!");
               break;
           case TUESDAY:
               System.out.println("Tuesday, today is celery soup :(");
               break;
               //...and so on until the end
       }
   }
}
Iki minangka salah sawijining kaluwihan Enum babagan solusi lawas sing digunakake sadurunge Java 1.5: solusi lawas ora bisa digunakake karo switch .

Apa maneh sampeyan kudu ngerti babagan kelas Enum?

kelas Enum punika kelas nyata karo kabeh kabisan sing teka karo. Contone, yen implementasine dina minggu saiki ora cukup kanggo sampeyan, sampeyan bisa nambah variabel, konstruktor lan metode kanggo 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 + '\'' +
               '}';
   }
}
Konstanta Enum kita saiki duwe kolom judhul , getter, lan metode toString sing diganti . Dibandhingake karo kelas biasa, Enum duwe watesan serius - ora bisa diwarisake. Kajaba iku, enumerasi duwe cara sing unik:
  • values() : ngasilake array saka kabeh nilai sing disimpen ing Enum :

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

    Kesimpulan:

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

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

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

    Kesimpulan:

    0

  • valueOf() : Ngasilake obyek Enum sing cocog karo jeneng sing diwenehake:

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

    Kesimpulan:

    DayOfWeek{title='Minggu'}

Pay manungsa waé:Kita huruf kapital jeneng unsur Enum amarga padha konstanta lan ditetepake minangka konstanta, ora camelCase .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION