1. Background kung paano enum
naging
Ngayon ay tutuklasin natin ang isa pang uri ng data type sa Java: enum
. Ang pangalan enum
ay nagmula sa salitang enumeration . Ano ang uri ng data na ito at para saan ito?
Minsan ang isang programmer ay kailangang lumikha ng isang bagong uri ng data, na ang mga posibleng halaga ay limitado sa isang maliit na nakapirming listahan.
Halimbawa, ang isang DayOfTheWeek
uri ay maaari lamang kunin ang mga halaga MONDAY
, TUESDAY
, WEDNESDAY
, ... Mayroong 7 halaga sa kabuuan. O ang isang Month
uri ay maaari lamang kumuha ng mga halaga JANUARY
, FEBRUARY
, MARCH
, ... Mayroong 12 halaga sa kabuuan.
Siyempre, gumamit ka ng mga numerong maaaring (ang int
uri): 1
— Lunes, 2
— Martes, atbp. Ngunit maaaring may hindi sinasadyang magtalaga ng mga di-wastong halaga gaya ng 8
o 0
sa iyong variable.
Madali kang magkaroon ng isang sitwasyon kung saan iniisip ng isang programmer na ang mga araw ng linggo (o mga buwan ng taon) ay binibilang simula sa zero, habang ang iba ay umaasa na ang kanilang pagnunumero ay magsisimula sa isa, atbp.
Iyon ang dahilan kung bakit ipinakilala ng Java ang enum
, isang uri ng data na binubuo ng isang may hangganan na hanay ng mga halaga .
2. Pagdedeklara ng isang uri
Ang pagdedeklara ng bagong enum
uri ng data ay ganito ang hitsura:
enum TypeName
{
VALUE1,
VALUE2,
VALUE3
}
Nasaan TypeName
ang pangalan ng bagong uri (klase), at ang mga posibleng halaga ay pinaghihiwalay ng mga kuwit at nakabalot sa mga kulot na brace: Value1
, Value2
, Value3
.
Bilang halimbawa, gumawa tayo ng sarili nating DayOfTheWeek
enum
:
Code | Tandaan |
---|---|
|
Bagong Day uri Lunes Martes Miyerkules Huwebes Biyernes Sabado Linggo |
Narito kung paano ka magtatalaga ng value sa isang variable ng aming bagong uri:
Day day = Day.MONDAY;
Halimbawa:
Code | Tandaan |
---|---|
|
Ang output ng screen ay magiging:
|
3. Pamamaraan ng isangenum
Ang isang enum
uri ay may ilang mga built-in na pamamaraan, dalawa sa mga ito ay lubhang kawili-wili:
Ang static values()
na pamamaraan ay nagbabalik ng isang hanay ng lahat ng mga halaga ng enum
uri:
Code | Tandaan |
---|---|
|
Ang days variable ay nag-iimbak ng isang array na naglalaman ng mga halaga ng Day uri (7 elemento) Ipakita ang mga nilalaman ng array sa screen:
|
Ang ordinal()
pamamaraan ay nagbabalik ng ordinal na numero ng pare-pareho. Tinatawag mo ito sa isang enum
halaga sa halip na isang enum
klase:
Code | Output ng console |
---|---|
|
|
4. Pag-convert sa isang klase
Sa totoo lang, walang mahiwagang bagay dito. Binigyan lang kami ng compiler ng ilang syntactic sugar. Sa oras ng pag-compile, ang Day
enum ay na-convert sa isang ordinaryong klase:
Code, pinasimpleng bersyon | Tandaan |
---|---|
|
Day class Listahan ng mga static constants Isang array na may lahat ng value ng Day enum Isang variable na nag-iimbak ng value ng isang partikular Day na object Pribado ang Day class's constructor , na nangangahulugang ang mga object ng Day klase ay maaari lamang gawin sa loob ng Day klase. Ang ordinal pamamaraan ay dapat na tinatawag sa isang Day bagay. Ibinabalik nito ang halaga ng bagay — ang value field. Ang pamamaraan ay nagbabalik ng isang static na array kasama ang lahat ng mga halaga ng Day klase |
Kung aalisin namin ang lahat ng mga static na pamamaraan at variable mula sa Day
klase, makukuha namin ang sumusunod:
Code | Tandaan |
---|---|
|
Ang value variable ay nag-iimbak ng halaga ng Day mga object Day object ay maaari lamang gawin sa loob ng Day klase, dahil ang constructor ay private . Ibinabalik ng pamamaraan ang ng bagay. ordinal() value Day |
Sa madaling salita, walang nakakatakot na nangyayari dito. Ang compiler ay lumilikha ng Day
klase, nagdaragdag ng mga constant na kumakatawan sa mga enum
halaga, nagdadagdag ng mga kinakailangang pamamaraan, at gumagawa ng class constructor private
. Titingnan natin kung paano gumagana ang mga konstruktor sa ibang pagkakataon.
Sana, malinaw na ngayon kung bakit tayo nagtatalaga ng value sa isang variable sa ganitong paraan:
Day day = Day.MONDAY;
MONDAY
ay isang static na field lamang (constant) sa Day
klase. Kapag nag-a-access ng mga static na pamamaraan at field mula sa labas ng klase, dapat mong isaad ang pangalan ng klase bago ang pangalan ng field o pamamaraan.
5. Higit pang mga pamamaraan ng isangenum
Ang bawat enum
klase ay may ilang mga kagiliw-giliw na tampok.
Pag-convert sa at mula sa isang string
Upang i-convert ang isang enum object sa isang string, kailangan mong tawagan ang toString()
pamamaraan nito.
String str = Day.MONDAY.toString();
Upang mag-convert sa kabilang direksyon (mula sa isang string patungo sa isang Day
bagay), maaari mong gamitin ang static valueOf()
na paraan:
Day day = Day.valueOf("MONDAY");
Ito ay sobrang maginhawa at magiging kapaki-pakinabang sa maraming mga kaso.
Nagko-convert sa isang numero at bumalik muli
Alam mo na kung paano i-convert ang isang enum
bagay sa isang numero: tawagan ang ordinal()
pamamaraan:
int index = Day.MONDAY.ordinal();
Upang mag-convert sa kabilang direksyon (mula sa isang numero patungo sa isang Day
bagay), kailangan mo ng isang mas transparent na konstruksyon:
Day day = Day.values()[2];
Mga halimbawa:
Code | Tandaan |
---|---|
|
Lunes Kunin ang index ng Lunes: 0 Araw ng linggo 2 araw pagkatapos ng Lunes |
Mahalagang punto: dahil enum
ang mga halaga ay isang nakapirming hanay ng mga constant, maaari silang ihambing gamit ang == . Sa madaling salita, hindi ka maaaring magkaroon ng dalawang magkaparehong MONDAY
bagay na may magkaibang address. Isang instance lang ng bawat enum value ang umiiral. At nangangahulugan ito na ang paghahambing ng mga variable ng enum gamit ang == ay palaging gagana.
6. Pagdaragdag ng sarili mong pamamaraan sa isangenum
Dahil ang isang enum
ay nagiging isang ordinaryong klase sa oras ng pag-compile, maaari mong ideklara ang mga pamamaraan dito. Ang mga pamamaraan na ito ay idinagdag lamang sa klase na binubuo ng compiler. Halimbawa, ipagpalagay na gusto naming Day enum
ibalik namin ang isang listahan ng mga halaga ng enum sa halip na isang array.
Pagkatapos ay maaari naming idagdag ang sumusunod na code:
Code | Tandaan |
---|---|
|
Ang isang semicolon ay kinakailangan pagkatapos ng listahan ng mga halaga. Lumikha ng isang ArrayList bagay Idagdag ang mga halaga sa array na ibinalik ng values() pamamaraan. Ibalik ang listahan. |
Ngayon ang pamamaraang ito ay maaaring tawagin sa code:
Code | Tandaan |
---|---|
|
Ang list variable ay mag-iimbak ng isang listahan ng lahat ng mga halaga ng Day enum . |
GO TO FULL VERSION