Programmirlänimizde, köplenç belli bir maglumat görnüşi üçin dogry bahalar toplumyny çäklendirmek zerurlygy bilen ýüzbe-ýüz bolýarys. Şeýlelikde, mysal üçin hepdäniň güni 7 dürli gymmatlyk bolup biler, ýylyň aýy 12, möwsüm bolsa 4 bolup biler. Şeýle meseleleri çözmek üçin statiki görnüşde ýazylan programma dilleriniň köpüsi ýörite maglumat görnüşini berýär - sanamak (
Elementler , klassyň
enum
). Sanamak Java-da derrew peýda bolmady. 1.5-nji wersiýasyndan başlap ýöriteleşdirilen dil gurluşy enum
girizildi. Şu wagta çenli programmistler sanamagy amala aşyrmak üçin başga usullary ulandylar.
enum gurluşygy
Bir mysal bilen başlalyň.enum
Möwsümi ulanmak üçin maglumat görnüşini suratlandyralyň :
enum Season { WINTER, SPRING, SUMMER, AUTUMN }
Ony ulanmagyň ýönekeý mysaly:
Season season = Season.SPRING;
if (season == Season.SPRING) season = Season.SUMMER;
System.out.println(season);
Netijede SUMMER konsola çap ediler . Mysal aýdyň we düşündiriş gerek däl diýip pikir edýärin.
Enum synpdyr
Deklarasiýa etmek bilenenum
, alnan synpy aç-açan döredýäris java.lang.Enum
. Adatça gurluşyk enum Season { ... }
deňdir class Season extends java.lang.Enum { ... }
. Düzediji bize aç-açan miras almaga rugsat bermese-de , ulanyp miras galandygyny java.lang.Enum
barlamak henizem aňsat : enum
reflection
System.out.println(Season.class.getSuperclass());
Konsolda aşakdakylar görkeziler:
class java.lang.Enum
Hakyky miras, Java düzüjisi tarapyndan awtomatiki ýerine ýetirilýär. Ondan soň, sanamagy amala aşyrmak üçin düzüji tarapyndan döredilen synpy enum
we sanalan görnüşiň mümkin bolan bahalaryny enum
-a elementleri diýip atlandyrmaga razylyk bereliň.
enum
Enum agzalary , statiki taýdan elýeterli bolan klassyň mysallarydyr
Elementler , klassyň enum Season (WINTER, SPRING и т.д.)
statiki taýdan elýeterli mysallarydyr . Olaryň statiki elýeterliligi, deňeşdirme operatory ulanyp deňeşdirmeleri amala aşyrmaga mümkinçilik berýär . Mysal: enum
Season
==
Season season = Season.SUMMER;
if (season == Season.AUTUMN) season = Season.WINTER;
Enum elementiniň ady we seriýa belgisi
Öň bellenip geçilişi ýaly, sanamak üçin peýdaly birnäçe usuly öz içine alýan islendikenum
klas miras alýar . java.lang.Enum
Mysal:
Season season = Season.WINTER;
System.out.println("season.name()=" + season.name() + " season.toString()=" + season.toString() + " season.ordinal()=" + season.ordinal());
Çykyş:
season.name()=WINTER season.toString()=WINTER season.ordinal()=0
Usullary name()
we toString()
şu ýerde görkezilýär ordinal()
. Usullaryň manysy aýdyňdyr. enum
Bu usullaryň synpdan miras galandygyny bellemelidiris java.lang.Enum
. Adynyň setir şekillendirilmegi bilen bir element almakenum
Köplenç bir elementiň enum
setir görnüşi bilen alynmagy ýüze çykýar. Bu maksatlar üçin, her bir enum
klasda düzüji awtomatiki usulda ýörite statiki usuly döredýär: bu san san elementini deň at bilen yzyna public static EnumClass valueOf(String name)
gaýtaryp berýär . Ulanylyş mysaly: EnumClass
name
String name = "WINTER";
Season season = Season.valueOf(name);
Kodyň ýerine ýetirilmegi netijesinde möwsüm üýtgeýjisi deň bolar Season.WINTER
. Element tapylmasa, “ IllegalArgumentException”name
zyňyljakdygyny we deň bolsa null
, “NullPointerException” zyňyljakdygyny ýadyňyzdan çykarmaň . .Eri gelende aýtsak, bu köplenç unudylýar. Näme üçindir, bir funksiýa bir argument alsa we belli bir şertlerde “ IllegalArgumentException” zyňsa , şol ýerden geçende “IllegalArgumentException” -yňnull
hem atyljakdygyna berk ynanýarlar . That'söne bu meseläniň gapdalynda. Dowam edeliň. Hasaplamanyň ähli elementlerini almak Käwagt iş wagtynda a-klassyň ähli elementleriniň sanawyny almaly bolarsyňyz . Bu maksatlar üçin düzüji her synpda bir usul döredýär . Ulanylyş mysaly: enum
enum
public static EnumClass[] values()
System.out.println(Arrays.toString(Season.values()));
Aşakdaky netijäni alýarys:
[WINTER, SPRING, SUMMER, AUTUMN]
Synpda ne usul valueOf()
, ne-de usul kesgitlenendigine üns beriň . Munuň ýerine, -class düzülende awtomatiki usulda düzüji tarapyndan goşulýar . Klassyňyza öz usullaryňyzy goşmak Siz öz usullaryňyzy-klasa-da , onuň elementlerine-de goşup bilersiňiz : Birmeňzeş, ýöne polimorfizm bilen: Iň soňky mysal mirasyň ulanylyşyny görkezýär . Bu barada has soňrak. Java -da miras , obýektler bir ýagdaýda döredilen we statiki taýdan elýeterli bolan synp iýerarhiýasyny durmuşa geçirmäge mümkinçilik berýär. Bu ýagdaýda elementler öz konstruktorlaryny öz içine alyp biler. Mysal getireliň: Bu ýerde üç element bilen sanalmagy yglan edýäris we . Düzediji aşakdaky synplary we obýektleri döreder: values()
java.lang.Enum
enum
enum
enum
enum
enum
enum
enum
Type
INT
INTEGER
STRING
Type
- alnan synpjava.lang.Enum
INT
- 1-nji synpyň obýektiType
INTEGER
- 2-nji synpyň obýektiType
STRING
- 3-nji synpyň obýektiType
Object parse(String)
Alnan üç synp polimorf usul we konstruktor bilen dörediler Type(..., boolean)
. Şol bir wagtyň özünde, synplaryň obýektleri INT
we bir nusgada bar we statiki taýdan elýeterli. Muny tassyklap bilersiňiz: INTEGER
STRING
System.out.println(Type.class);
System.out.println(Type.INT.getClass() + " " + Type.INT.getClass().getSuperclass());
System.out.println(Type.INTEGER.getClass() + " " + Type.INTEGER.getClass().getSuperclass());
System.out.println(Type.STRING.getClass() + " " + Type.STRING.getClass().getSuperclass());
Aşakdaky netijäni alýarys:
class Type
class Type$1 class Type
class Type$2 class Type
class Type$3 class Type
Type
Düzüjiniň synp we 3 nested
synp döredendigini görmek bolýar Type
.
Miras bilen bölünen enum-synp
Type
Aboveokardakylary tassyklamak üçin sanagy ýokardaky mysaldan aýyrmagyň netijesini hem hödürleýäris :
Sanalmalar we parametriki polimorfizm
Okyjy haýran galyp biler: " Näme üçin ýokardaky görnüş sanamak generikleri ulanmaýar? " Hakykat, Java-da generikleri ulanmak gadagandyrenum
. Şonuň üçin aşakdaky mysal düzülmez:
enum Type<T> {}
Goşmaça okuw
Java-da sanamagyň nähili işleýändigine has çuňňur düşünmek üçin synpyň deslapky kody bilen tanyşmagyňyzyjava.lang.Enum
we döredilen kody öwrenmek üçin Jad desompilerini ulanmagy maslahat berýärin. Mundan başga-da, Java kitaphanasynyň deslapky koduny öwrenmek, Java-da näçe mehanizmiň işleýändigine düşünmek üçin zerurdyr we obýekte gönükdirilen dizaýn üçin peýdalydyr. Asyl çeşmä baglanyşyk: http://alexander.lds.lg.ua/
GO TO FULL VERSION