1. Latar kepriye enum
kedadeyane
Dina iki kita bakal njelajah jinis data liyane ing Jawa: enum
. Jeneng kasebut enum
asale 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, DayOfTheWeek
jinis mung bisa njupuk nilai MONDAY
, TUESDAY
, WEDNESDAY
, ... Ana 7 nilai total. Utawa Month
jinis mung bisa njupuk mung nilai JANUARY
, FEBRUARY
, MARCH
, ... Ana 12 nilai total.
Mesthi, sampeyan nggunakake bisa nomer ( int
jinis): 1
- Senin, 2
- Selasa, etc. Nanging wong bisa sengaja nemtokake nilai ora bener kayata 8
utawa 0
kanggo 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 enum
katon kaya iki:
enum TypeName
{
VALUE1,
VALUE2,
VALUE3
}
Endi TypeName
jeneng 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 |
---|---|
|
Day Jinis 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 enum
jinis duwe sawetara metode sing dibangun, loro sing menarik banget:
Cara statis values()
ngasilake array saka kabeh nilai saka enum
jinis:
Kode | Cathetan |
---|---|
|
Variabel days nyimpen array sing ngemot nilai saka Day jinis (7 unsur) Nampilake isi array ing layar:
|
Cara ordinal()
ngasilake nomer ordinal saka konstanta. Sampeyan nyebataken ing enum
nilai tinimbang enum
kelas:
Kode | Output konsol |
---|---|
|
|
4. Ngonversi menyang kelas
Ing kasunyatan, ora ana sing magis ing kene. Compiler mung menehi gula sintaksis. Ing wektu kompilasi, Day
enum diowahi dadi kelas biasa:
Kode, versi prasaja | Cathetan |
---|---|
|
Day kelas Dhaftar konstanta statis Larik karo kabeh nilai saka Day enum Variabel sing nyimpen Nilai saka Day obyek tartamtu Kelas iku pribadi, kang tegese obyek saka Day kelas mung bisa digawe nang kelas. Cara kasebut kudu diarani obyek. Iki ngasilake nilai obyek - lapangan . Cara kasebut ngasilake array statis kanthi kabeh nilai kelasconstructor Day Day ordinal Day value Day |
Yen mbusak kabeh metode statis lan variabel saka Day
kelas, kita entuk ing ngisor iki:
Kode | Cathetan |
---|---|
|
Variabel value nyimpen nilai obyek Day obyek Day mung bisa digawe nang Day kelas, wiwit konstruktor punika private . Cara ordinal() ngasilake obyek value kasebut Day . |
Ing tembung liya, ora ana sing medeni ing kene. Compiler nggawe Day
kelas, nambah konstanta sing makili enum
nilai, 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;
MONDAY
mung lapangan statis (konstan) ing Day
kelas. 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 enum
kelas 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 Day
obyek), 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 enum
obyek menyang nomer: nelpon ordinal()
cara:
int index = Day.MONDAY.ordinal();
Kanggo ngowahi arah liyane (saka nomer menyang Day
obyek), 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 enum
nilai-nilai minangka set konstanta tetep, bisa dibandhingake nggunakake == . Ing tembung liyane, sampeyan ora bisa duwe rong MONDAY
obyek 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 enum
dadi kelas biasa ing wektu kompilasi, sampeyan bisa ngumumake metode kasebut. Cara kasebut mung ditambahake ing kelas sing digawe kompiler. Contone, umpamane kita pengin Day enum
bali dhaptar nilai enum tinimbang array.
Banjur kita bisa nambah kode ing ngisor iki:
Kode | Cathetan |
---|---|
|
Titik koma dibutuhake sawise dhaptar nilai. Nggawe ArrayList obyek Tambah nilai ing larik bali dening values() cara. Mbalik dhaptar. |
Saiki cara iki bisa diarani kode:
Kode | Cathetan |
---|---|
|
Variabel list bakal nyimpen dhaptar kabeh nilai saka Day enum . |
GO TO FULL VERSION