Java Enumi õpetus: mis see on ja kuidas seda rakendada?



See artikkel Java Enumi õpetuse kohta annab teile üksikasjalikud teadmised Enumi konstantide kohta koos praktiliste näidetega paremaks mõistmiseks.

The Loendamine aastal on viis, kuidas määratleda fikseeritud ja nimetatud konstantidega klass nende vastavatega kasutades märksõna loend. Selles ' Java Enumi õpetus ”Artikliga õpimemäärake loend koosnäited paremaks mõistmiseks.

Mis on loendamine?

Java Enums on klassid, millel on kindel konstantide või muutujate kogum, mis ei kipu muutuma. Java loendamine saavutatakse märksõna abil loend. Java loend konstandid on staatiline ja lõplik kaudselt. Funktsioon Enum on saadaval alates aastast JDK versioon 1.5.





Miks me vajame loendamist?

loend parandab tüübiohutust kompileerimisaja kontrollimisel, et vältida vigu käitamise ajal, vältides katlakoodi koodi. Näiteks kui peate valima vähimate võimalike valikute seast ühe võimaluse, öelge:

Töö Tüüp: (Leping / Ajutine / Alaline)



Java enumi õpetuse töötaja

Siis oleks parim võimalus kasutada loend. Sest loend saab hõlpsasti kasutada lülitis. loend saab läbida. loend saab omama väljad, konstruktorid ja meetodid. Seega, see suurendab kompileerimisaja kontrollimist ja väldib vigade tekkimist kehtetute konstantide edastamisel, kuna olete juba dokumenteerinud, milliseid väärtusi on seaduslik kasutada.

Erinevused Enumi ja klassi vahel

Kuigi klassil ja loendil on Java-keskkonnas sarnased funktsioonid, erinevad need mõne aspekti poolest. Arutagem erinevuste üle



Enum Klass
Enumi konstantidest ei saa üle vaadataKlassikonstandid saab tühistada
Enum ei toeta objektide loomistKlass toetab objektide loomist
Enum ei saa laiendada teisi klasseKlass võib laiendada teisi klasse
loend cmasina liidesKlass saab rakendada liidest


Enumi praktilised näited

Nüüd, et mõista enumit palju paremal viisil, teostagem järgmisele tuginedes mõningaid praktilisi näiteid.

Loenduse määratlemine Java-s

Enumi võib kuulutada kas klassi sees või väljaspool c-dlase. Kuid seda ei saa üheski meetodis deklareerida. Võtame väikese näite, et mõista selle süntaksit, määratlust ja deklaratsiooni.

Süntaks:

loendinimi {konstants}

Selles näites oleme deklareerinud peamine () meetod sees loend

paketi määratlus avalik klass Edureka {enum Level {BAJA, KTM, YAMAHA} public staatiline void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Ouput

KTM

Selles näites peamine () meetod deklareeritakse väljas loendust.

pakendi määratlus enum Värv {BAJAJ, KTM, YAMAHA} avalik klass Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

// Väljund:

YAMAHA

Enum, mida kasutatakse Switch Case'is

Loendamist saab kasutada ka lülitilauses. On oluline, et kõik juhtumilaused peavad kasutama samast loendist koosnevaid konstande, mida kasutab switchi lause. Kontrollime selle põhjal näidet.

Siin kuulutame välja loendi, mille elementideks on nädalapäevad, ja edastame andmed stringina, et sobiva juhtumi andmed printida.

pakett vahetatud loend Päev {PÜHAPÄEV, ESMASPÄEV, TEISIPÄEV, KOLMAPÄEV, NELJAPÄEV, Reede, LAUPÄEV} avalik tund Edureka {Päevapäev avalik Edureka (päevapäev) {this.day = day} public void dayIsLike () {switch (day) {case ESMASPÄEV: System.out.println ('Tere, täna on esmaspäev') vaheaja TEISIPÄEV: System.out.println ('Tere, täna on teisipäev') pausi juhtum KOLMAPÄEV: System.out.println ('Tere, täna on kolmapäev ') pausi juhtum NELJAPÄEV: System.out.println (' Tere, täna on neljapäev ') pausi juhtum REEDE: System.out.println (' Tere, täna on reede. ') pausi juhtum LAUPÄEV: System.out.println (' Tere, täna on teie nädalavahetus ') vaheaja PÜHAPÄEV: System.out.println (' Tere, täna on puhkus ') vaheaja vaikimisi: System.out.println (' Palun sisestage kehtiv päev. ') Paus}} public static void main (String [] args) {String str = 'ESMASPÄEV' Edureka e1 = uus Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

// Väljund:

Tere, täna onEsmaspäev

Pärimine enumi abil

Põhimõtteliselt ükskõik loend on esindatud klassina, mis laiendab abstraktset klassi java.lang. Enum ja sellel on mitu staatilist liiget. Seetõttu an loend ei saa laiendada ühtegi teist klassi ega loend pole mitu pärandused . Teeme näite, et seda paremini mõista.

Siinkohal pärime operatsioonisüsteemi telefonitegija põhjal.

paketi pärand import java.util.ArrayList import java.util.List public class Edureka {public static void main (String [] args) {List pärand = uus ArrayList () paveldu.add (LibraryEnum.FIRST) pärand.add (ClientEnum. google) (HTTPMethodConvertible element: pärima) {System.out.println (element.getHTTPMethodType ())}} staatilise liidese HTTPMethodConvertible {public String getHTTPMethodType ()} staatilise loendiga LibraryEnum rakendab HTTPMethodConvertible {FIRST 'Huawei'), THIRD ('Apple 11 Pro') string httpMethodType LibraryEnum (stringi telefon) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} staatiline enum ClientEnum rakendab HTTPMethodConvertible {huawei ('Hong ('iOS'), google ('Android One') string httpMethodType ClientEnum (String s) {httpMethodType = s} public String getHTTPMethodType () {return httpMethodType}}}

// Väljund:

Google Pixel
Android One

Loendage kohandatud väärtustega

Enumitel on vaikimisi oma stringiväärtused, loenditele võime määrata ka mõned kohandatud väärtused. Vaatleme allpool toodud näidet.

enum Liiklus {PUNANE (“STOP”), APELSIN (“WAIT”), ROHELINE (“GO”)}

Ülaltoodud näites näeme, et Traffic enumil on kolm liiget. Nimelt

PUNANE, APELSIN ja ROHELINE on oma erinevad kohandatud väärtused STOPP, OOTA ja GO vastavalt.

Nüüd, et kasutada sama tüüpi loendit koodis, peaksime järgima mõningaid punkte:

  • Me peame looma parameetriga konstruktor selle enum klassi jaoks. Sest me teame seda loend klassi objekti ei saa selgesõnaliselt luua, nii et lähtestamiseks kasutame parameetritega konstruktorit.
  • The ehitaja ei saa olla avalikkus ega kaitstud privaatne või vaikimisi modifikaatorid. Kui loome avalikke või kaitstud, võimaldab see initsialiseerida mitu objekti, mis on täielikult vastu enumi funktsionaalsus.
  • Selle väärtuse saamiseks peame looma parema meetodi enums.

Käivitame selle põhjal programmi.

pakettliikluse loend TrafficSignal {RED ('STOP'), ROHELINE ('GO'), ORANGE ('WAIT') privaatne Stringitoiming public String getAction () {return this.action} private TrafficSignal (Stringitoiming) {this.action = action}} public class Edureka {public static void main (String args []) {TrafficSignal [] signal = TrafficSignal.values ​​() for (TrafficSignal signal: signals) {System.out.println ('nimi:' + signaali.nimi () + 'action:' + signal.getAction ())}}}

// Väljund:

nimi: PUNANE tegevus: STOP
nimi: ROHELINE tegevus: GO
meese: ORANGE tegevus: OOTA

Loendage lausetes if-else-if

Nüüd käivitagem programm selle põhjal loendit if-else-if avaldustes. Siit leiame läbimise suuna, edastades loendis saadaolevate suundade väärtused.

pakett Juhised enum Juhised {EAST, WEST, NORTH, SOUTH} public class Edureka {public static void main (String args []) {Directions dir = Directions.NORTH if (dir == Directions.EAST) {System.out.println ( 'Direction: East')} else if (dir == Directions.WEST) {System.out.println ('Direction: West')} else if (dir == Directions.NORTH) {System.out.println ('Direction : Põhja ')} else {System.out.println (' Suund: Lõuna ')}}}

// Väljund:

Ütlepealkiri: Põhja

Erinevad meetodid, mida kasutatakse koos enumiga

Väärtused(): Kui loote loendi, siis Java kompilaator sisemiselt lisab väärtused() meetod. See meetod tagastab väärtuse massiiv mis sisaldab kõiki loendi väärtusi.

// Süntaks:

avalikud staatilised loenditüübi [] väärtused ()

Saame teada massiivi konkreetse elemendi indeksi väärtuse.

paketi väärtuste loend Värv {PUNANE, ROHELINE, SININE} avalik klass Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() for (Color col: arr) {System.out.println ( col + 'indeksis '+ col.ordinal ())} System.out.println (Color.valueOf (' RED '))}}

// Väljund:

PUNANE indeksis 0
ROHELINE indeksil 1
SININE indeksil 2
NET

ValueOf (): Seemeetodit kasutatakse loenduskonstandi tagastamiseks, mille väärtus on võrdne väärtusega antud meetodi nimetamisel argumendina.

// Süntaks:

public staatiline loenditüübi väärtusOf (String str)

Siit leiame konkreetse telefoni maksumuse stringile edastatava sisendi põhjal.

enum Mobile paketi väärtused {Samsung (1099), Apple (1250), Google (1325) int price Mobile (int p) {price = p} int showPrice () {return price}} public class Edureka {public static void main (String args []) {System.out.println ('Mobiiltelefonide loend:') (Mobile m: Mobile.values ​​()) {System.out.println (m + 'kulud' + m.showPrice () + 'dollarit' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Valitud:' + ret)}}

// Väljund:

Samsung maksab 1099 dollarit
Apple maksab 1250 dollarit
Google maksab 1325 dollarit
Valitud: Samsung

Järjekord (): Java tõlk lisab järjestus () meetod sisemiselt, kui see loob loend. Ordinal () meetod tagastab indeks loendi väärtusest.

// Süntaks:

avaliku finaali järjekord ()

Siit saame teada massiivi konkreetse elemendi indeksi väärtuse. ja ka kirsivilja asend.

Pakendi järjekorranumbrid Puuviljad {Õun, banaan, kirss, kuupäev, leedripuu} loend Köögiviljad {Porgand, peet, oad, tomat, sibul} avaliku klassi Edureka {avalik staatiline void main (String [] args) {Fruits [] fru = Fruits. väärtused () väärtusele (Fruits fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Puuviljad f1, f2, f3 f1 = Puuviljad. Õun f2 = Puuviljad. Kirss f3 = Puuviljad. Õun if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'tuleb pärast' + f1)} Köögivili v1 = Köögivili. Peedijuur if (f1.võrrand (v1)) {System.out.println (' Vale ')}}}

// Väljund:

Õun: 0
Banaan: 1
Kirss: 2
Kuupäev: 3
Elderberry: 4
Kirss tuleb Apple'i järele

Enumi eelised

  • Java Enum paraneb tüübi ohutus
  • Enum on loodud hõlpsasti kasutatavana vahetada juhtumeid
  • Enum võib olla läbitud
  • Enum võib olla väljad, meetodid, ja konstruktorid
  • Enum saab rakendada liidesed
  • Enum ei saa pikendada a klass sest sisemiselt see laieneb Enum klass

Enum Usecase: kivi, paber, kääride mäng

Kasutame loend Java-s, et luua meie lapsepõlvemäng, kivi (kivi) paber ja käärid . Järgmine kood selgitab, kuidas.

pakett Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} public class SPS {public static void main (String [] args) {Random random = new Random () boolean gameOver = false HandSign playerMove = HandSign.SCISSOR HandSign computerMove int numTrials = 0 int numComputerWon = 0 int numPlayerWon = 0 int numTie = 0 Skanner sisse = uus skanner (System.in) System.out.println ('nLase alustada ... n') (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nTeie kord (sisestage kääride jaoks s, paberi jaoks p, kivi jaoks t, q väljumiseks): n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} else if (inChar ==' s ' ) {playerMove = HandSign.SCISSOR} else if (inChar == 'p') {playerMove = HandSign.PAPER} else if (inChar == 't') {playerMove = HandSign.STONE} else {System.out.println ( 'nPalun kontrollige sisendit ja proovige uuesti! n') validInput = false}} (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIni on minu kord: SCISSORn')} veel, kui (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nMinu kord on: PABERn')} else {computerMove = HandSign.STONE System.out.println ('nIni on minu kord: KIVI')} if (computerMove = = playerMove) {System.out.println ('nSee on lips! n') ++ numTie} muud, kui (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor lõikab paberit , Võitsin! N ') ++ numComputerWon} veel, kui (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper murrab kivi, võitsin! N ') ++ numComputerWon} else if (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone purustab käärid, võitsin! n') ++ numComputerWon} else {System.out.println ('nÕnnitleme. ..! Võitsite! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nKatsetuste arv: '+ numTrials) System.out.printf (' Võitsin% d (%. 2f %%) . Võitsite% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Nägemist! Loodetavasti teile meeldis ..! ' )}}

// Väljund:

erinevus ansible ja koka vahel

Alustame ...
Käär-paber-kivi
Teie kord (palun sisestage s kääride jaoks, p paberi jaoks, t kivi jaoks, q sulgemiseks):
s
On minu kord: KIVI
Kivi murrab käärid, ma võitsin!
Käär-paber-kivi
Teie kord (palun sisestage s kääride jaoks, p paberi jaoks, t kivi jaoks, q sulgemiseks):
mida
Katsete arv: 1 võitsin 1 (100,00%). Võitsite 0 (0,00%).
Nägemiseni! Loodan, et teile meeldis ..!

Sellega jõuame selle Java Enumi õpetuse lõpuni. Loodetavasti olete mõistnud Java Enumi ja selle rakendamist mõne reaalajas toimuva näite abil.

Nüüd, kui olete aru saanud loend selle Java Enumi õpetuse kaudu saate tutvuda Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik hõlmab üle 250 000 rahuloleva õppija, levinud üle kogu maailma. Edureka Java J2EE ning SOA koolitus- ja sertifitseerimiskursused on mõeldud üliõpilastele ja spetsialistidele, kes soovivad olla Java arendajad. Kursus on loodud selleks, et anda teile Java-programmeerimises alustamine ja õpetada teid nii Java-põhi kui ka edasijõudnute kontseptsioonide ning erinevate Java-raamistike jaoks, nagu talveunerežiim ja Kevad .

Kas teil on meile küsimus? Mainige seda selle ajaveebi “Java Enum õpetus” kommentaaride jaotises ja võtame teiega ühendust niipea kui võimalik.