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'}

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'}
Wacan liyane: |
---|
GO TO FULL VERSION