1. Latar kepriye enumkedadeyane
Dina iki kita bakal njelajah jinis data liyane ing Jawa: enum. Jeneng kasebut enumasale saka tembung enumerasi . Apa jinis data iki lan kanggo apa?
Kadhangkala programmer kudu nggawe jinis data anyar, sing nilai bisa diwatesi menyang dhaptar tetep cilik.
Contone, DayOfTheWeekjinis mung bisa njupuk nilai MONDAY, TUESDAY, WEDNESDAY, ... Ana 7 nilai total. Utawa Monthjinis mung bisa njupuk mung nilai JANUARY, FEBRUARY, MARCH, ... Ana 12 nilai total.
Mesthi, sampeyan nggunakake bisa nomer ( intjinis): 1- Senin, 2- Selasa, etc. Nanging wong bisa sengaja nemtokake nilai ora bener kayata 8utawa 0kanggo variabel Panjenengan.
Sampeyan bisa kanthi gampang duwe kahanan sing siji programmer mikir dina minggu (utawa sasi ing taun) sing nomer wiwit saka nul, nalika liyane ngarepake nomer sing diwiwiti saka siji, etc.
Pramila Jawa ngenalaken enum, jinis data sing kasusun saka sakumpulan nilai sing winates .
2. Nerangake jinis
Nyatakake jinis data anyar enumkaton kaya iki:
enum TypeName
{
VALUE1,
VALUE2,
VALUE3
}
Endi TypeNamejeneng jinis anyar (kelas), lan nilai bisa dipisahake dening koma lan kebungkus kurung kriting: Value1, Value2, Value3.
Minangka conto, ayo nggawe dhewe DayOfTheWeek enum:
| Kode | Cathetan |
|---|---|
|
DayJinis anyar Senin Selasa Rebo Kemis Jum'at Setu Minggu |
Mangkene carane sampeyan nemtokake nilai kanggo variabel jinis anyar kita:
Day day = Day.MONDAY;
Tuladha:
| Kode | Cathetan |
|---|---|
|
Output layar bakal dadi: |
3. Metode anenum
Sawijining enumjinis duwe sawetara metode sing dibangun, loro sing menarik banget:
Cara statis values()ngasilake array saka kabeh nilai saka enumjinis:
| Kode | Cathetan |
|---|---|
|
Variabel daysnyimpen array sing ngemot nilai saka Dayjinis (7 unsur) Nampilake isi array ing layar: |
Cara ordinal()ngasilake nomer ordinal saka konstanta. Sampeyan nyebataken ing enumnilai tinimbang enumkelas:
| Kode | Output konsol |
|---|---|
|
|
4. Ngonversi menyang kelas
Ing kasunyatan, ora ana sing magis ing kene. Compiler mung menehi gula sintaksis. Ing wektu kompilasi, Dayenum diowahi dadi kelas biasa:
| Kode, versi prasaja | Cathetan |
|---|---|
|
Daykelas Dhaftar konstanta statis Larik karo kabeh nilai saka Dayenum Variabel sing nyimpen Nilai saka Dayobyek tartamtu Kelas iku pribadi, kang tegese obyek saka Daykelas mung bisa digawe nang kelas. Cara kasebut kudu diarani obyek. Iki ngasilake nilai obyek - lapangan . Cara kasebut ngasilake array statis kanthi kabeh nilai kelasconstructorDayDayordinalDayvalueDay |
Yen mbusak kabeh metode statis lan variabel saka Daykelas, kita entuk ing ngisor iki:
| Kode | Cathetan |
|---|---|
|
Variabel valuenyimpen nilai obyek Dayobyek Daymung bisa digawe nang Daykelas, wiwit konstruktor punika private. Cara ordinal()ngasilake obyek valuekasebut Day. |
Ing tembung liya, ora ana sing medeni ing kene. Compiler nggawe Daykelas, nambah konstanta sing makili enumnilai, nambah cara sing perlu, lan nggawe konstruktor kelas private. Kita bakal nliti cara kerja konstruktor mengko.
Muga-muga, saiki wis jelas kenapa kita menehi nilai menyang variabel kanthi cara iki:
Day day = Day.MONDAY;
MONDAYmung lapangan statis (konstan) ing Daykelas. Nalika ngakses metode statis lan kolom saka njaba kelas, sampeyan kudu nunjukake jeneng kelas sadurunge jeneng lapangan utawa metode.
5. Cara liyane saka anenum
Saben enumkelas duwe sawetara fitur menarik.
Ngonversi menyang lan saka senar
Kanggo ngowahi obyek enum dadi senar, sampeyan kudu nelpon toString()metode kasebut.
String str = Day.MONDAY.toString();
Kanggo ngowahi arah liyane (saka senar menyang Dayobyek), sampeyan bisa nggunakake valueOf()cara statis:
Day day = Day.valueOf("MONDAY");
Iku super trep lan bakal mbiyantu ing akeh kasus.
Ngonversi menyang nomer lan bali maneh
Sampeyan wis ngerti carane ngowahi enumobyek menyang nomer: nelpon ordinal()cara:
int index = Day.MONDAY.ordinal();
Kanggo ngowahi arah liyane (saka nomer menyang Dayobyek), sampeyan butuh konstruksi sing luwih transparan:
Day day = Day.values()[2];
Tuladha:
| Kode | Cathetan |
|---|---|
|
Senin Entuk indeks Senin: 0 Dina minggu 2 dina sawise Senin |
Titik penting: amarga enumnilai-nilai minangka set konstanta tetep, bisa dibandhingake nggunakake == . Ing tembung liyane, sampeyan ora bisa duwe rong MONDAYobyek sing padha karo alamat beda. Mung siji conto saka saben nilai enum ana. Lan tegese mbandhingake variabel enum nggunakake == bakal tansah bisa.
6. Nambahake cara dhewe menyangenum
Amarga enumdadi kelas biasa ing wektu kompilasi, sampeyan bisa ngumumake metode kasebut. Cara kasebut mung ditambahake ing kelas sing digawe kompiler. Contone, umpamane kita pengin Day enumbali dhaptar nilai enum tinimbang array.
Banjur kita bisa nambah kode ing ngisor iki:
| Kode | Cathetan |
|---|---|
|
Titik koma dibutuhake sawise dhaptar nilai. Nggawe ArrayListobyek Tambah nilai ing larik bali dening values()cara. Mbalik dhaptar. |
Saiki cara iki bisa diarani kode:
| Kode | Cathetan |
|---|---|
|
Variabel listbakal nyimpen dhaptar kabeh nilai saka Day enum. |
GO TO FULL VERSION