JavaRush /Java Blog /Random-TK /Java-da sanalmalar (java enum)
articles
Dereje

Java-da sanalmalar (java enum)

Toparda çap edildi
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 ( enum). Sanamak Java-da derrew peýda bolmady. 1.5-nji wersiýasyndan başlap ýöriteleşdirilen dil gurluşy enumgirizildi. Şu wagta çenli programmistler sanamagy amala aşyrmak üçin başga usullary ulandylar. Java-da sanalmalar (java enum) - 1

enum gurluşygy

Bir mysal bilen başlalyň. enumMö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 bilen enum, 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.Enumbarlamak henizem aňsat : enumreflection
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 enumwe sanalan görnüşiň mümkin bolan bahalaryny enum-a elementleri diýip atlandyrmaga razylyk bereliň.

enumEnum 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: enumSeason==
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 islendik enumklas miras alýar . java.lang.EnumMysal:
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. enumBu usullaryň synpdan miras galandygyny bellemelidiris java.lang.Enum. Adynyň setir şekillendirilmegi bilen bir element almakenum Köplenç bir elementiň enumsetir görnüşi bilen alynmagy ýüze çykýar. Bu maksatlar üçin, her bir enumklasda 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: EnumClassname
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: enumenumpublic 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.EnumenumenumenumJava-da sanalmalar (java enum) - 2Java-da sanalmalar (java enum) - 3enumenumenumenumJava-da sanalmalar (java enum) - 4TypeINTINTEGERSTRING
  • 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 INTwe bir nusgada bar we statiki taýdan elýeterli. Muny tassyklap bilersiňiz: INTEGERSTRING
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
TypeDüzüjiniň synp we 3 nestedsynp döredendigini görmek bolýar Type.

Miras bilen bölünen enum-synp

TypeAboveokardakylary tassyklamak üçin sanagy ýokardaky mysaldan aýyrmagyň netijesini hem hödürleýäris :Java-da sanalmalar (java enum) - 5

Sanalmalar we parametriki polimorfizm

Okyjy haýran galyp biler: " Näme üçin ýokardaky görnüş sanamak generikleri ulanmaýar? " Hakykat, Java-da generikleri ulanmak gadagandyr enum. Ş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ňyzy java.lang.Enumwe 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/
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION