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 + '\'' +
'}';
}
}
Hemme zat gowy ýaly bolup görünýär, ýöne bir mesele bar: islendik teksti DayOfWeek synpynyň konstruktoryna geçirip bilersiňiz . Şeýlelik bilen, kimdir biri "Gurbaga", "Bulut" ýa-da "azaza322" hepdäniň gününi döredip biler. Bu, biziň garaşýan häsiýetimiz däl, sebäbi hepdäniň bary-ýogy 7 güni bar we olaryň hersiniň ady bar. Şonuň üçin biziň wezipämiz “ hepdäniň güni ” synpy üçin mümkin bolan gymmatlyklaryň çägini çäklendirmekdir . Java 1.5-den öň işläp düzüjiler bu meseläniň çözgüdini özbaşdak tapmaga mejbur boldular, sebäbi diliň özünde taýyn çözgüt ýokdy. Şol günlerde ýagdaý çäkli mukdarda gymmatlyklary talap edýän bolsa, muny etdiler:
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 + '\'' +
'}';
}
}
Bu ýerde üns bermeli zatlaryňyz:
-
Hususy konstruktor. Konstruktor şahsy üýtgediji bilen bellenen bolsa , şol konstruktoryň kömegi bilen synpyň obýekti döredilip bilinmez. Bu synpda diňe bir konstruktor barlygy sebäpli, DayOfWeek obýekti asla döredilip bilinmez.
public class Main { public static void main(String[] args) { DayOfWeek sunday = new DayOfWeek();//error! } }
-
Şol bir wagtyň özünde, synpda zerur bolan görnüşde başlanan köpçülikleýin statiki obýektler bardy (günleriň atlary dogry).
Bu zatlary beýleki synplarda ulanmaga mümkinçilik berdi.
public class Man { public static void main(String[] args) { DayOfWeek sunday = DayOfWeek.SUNDAY; System.out.println(sunday); } }
Netije:
DayOfWeek {title = 'Sunday'}
Enum näme?
Onda, Java-da Enum näme ? Şol bir DayOfWeek- iň mysalyna seredeliň :public enum DayOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
Bu eýýäm has ýönekeý görünýär :) Enumymyzyň içinde statiki girişli 7 sany yzygiderli bar. Programmada logikany durmuşa geçirmek üçin eýýäm ulanyp bileris. Mysal üçin, bir okuwçynyň şu gün mekdebe gitmelidigini ýa-da ýokdugyny kesgitleýän programma ýazalyň. ScholarSchedule synpy tarapyndan kesgitlenen okuwçymyzyň gündelik işi bolar :
public class ScholarSchedule {
private DayOfWeek dayOfWeek;
//...other fields
public DayOfWeek getDayOfWeek() {
return dayOfWeek;
}
public void setDayOfWeek(DayOfWeek dayOfWeek) {
this.dayOfWeek = dayOfWeek;
}
}
Gün tertibinde DayOfWeek üýtgeýjisi onuň haýsy gündigini kesgitleýär. Ine, biziň okuwçymyzyň synpy:
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 :(");
}
}
}
WakeUp () usulynda , Enum ulanyp , okuwçynyň mundan beýläkki hereketlerini kesgitleýäris. “DayOfWeek” -däki her üýtgeýjiniň nämäni aňladýandygyny jikme-jik düşündirip bilmedik , bu zerur däl: hepdäniň günleriniň mehanizmi eýýäm görnüp dur we häzirki görnüşinde ulansak, islendik dörediji nämä düşüner koduňyzda bolup geçýär. “Enum” -yň amatlylygynyň başga bir mysaly, yzygiderliligini wyklýuçatel beýany bilen ulanyp bolýar . Mysal üçin, naharlar gün tertibinde berk iýmitlenmek üçin programma ýazýarys:
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
}
}
}
Bu, Enumyň Java 1.5-den öň ulanylan köne çözgüdiň artykmaçlyklaryndan biridir : köne çözgüdi wyklýuçatel bilen ulanyp bolmaz .
Enum synpy barada başga näme bilmeli?
Enum synpy, ähli mümkinçilikleri bolan hakyky synpdyr. Mysal üçin, hepdäniň günleriniň häzirki durmuşa geçirilmegi size ýeterlik bolmasa, DayOfWeek- e üýtgeýänleri, konstruktorlary we usullary goşup bilersiňiz: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 + '\'' +
'}';
}
}
Enum-yň yzygiderliliginde indi at meýdançasy , gazanýan weString usuly ýok . Adaty sapaklar bilen deňeşdirilende, Enumyň çynlakaý çäklendirmesi bar - ony miras alyp bolmaz. Mundan başga-da, sanamagyň olara mahsus usullary bar:
-
values () : Enum- da saklanýan ähli bahalaryň massiwini görkezýär:
public static void main(String[] args) { System.out.println(Arrays.toString(DayOfWeek.values())); }
Netije:
[DayOfWeek {title = 'Sunday'}, DayOfWeek {title = 'Duşenbe'}, DayOfWeek {title = 'Sişenbe'}, DayOfWeek {title = 'Çarşenbe'}, DayOfWeek {title = 'Penşenbe'}, DayOfWeek {title = 'Juma'}, DayOfWeek {title = 'Şenbe'}]
-
ordinal () : üýtgewsizleriň nominal sanyny görkezýär. Sanamak noldan başlaýar:
public static void main(String[] args) { int sundayIndex = DayOfWeek.SUNDAY.ordinal(); System.out.println(sundayIndex); }
Netije:
0
- valueOf () :Berlen ada gabat gelýän Enum obýektini görkezýär:
public static void main(String[] args) { DayOfWeek sunday = DayOfWeek.valueOf("SUNDAY"); System.out.println(sunday); }
Netije:
DayOfWeek {title = 'Sunday'}
GO TO FULL VERSION