Java Enum -opetusohjelma: Mikä se on ja miten se toteutetaan?



Tämä artikkeli Java Enum -oppaasta antaa sinulle yksityiskohtaisen tiedon Enum-vakioista sekä käytännön esimerkkejä ymmärryksen parantamiseksi.

Luettelot on tapa määritellä luokka kiinteillä ja nimetyillä vakioilla vastaavineen käyttämällä avainsanaa enum. Tässä ' Java Enum -opastus ”Artikkeli, opimmemääritellä luettelo yhdessäesimerkkejä ymmärryksen parantamiseksi.

Mikä on luettelointi?

Java Enums ovat luokkia, joilla on kiinteä joukko vakioita tai muuttujia, joilla ei ole tapana muuttua. Java-luettelo saavutetaan avainsanalla enum. Java enum vakiot ovat staattinen ja lopullinen epäsuorasti. Enum-ominaisuus on käytettävissä vuodesta lähtien JDK-versio 1.5.





Miksi tarvitsemme luetteloa?

enum parantaa tyyppiturvallisuutta kokoamisajan tarkistuksessa, jotta vältetään virheet ajon aikana välttämällä kattilakoodia. Esimerkiksi, jos joudut valitsemaan yhden vaihtoehdon vähiten käytettävissä olevista vaihtoehdoista, sano

merkkijono jakaa useita erottimia java

Job Tyyppi: (Sopimus / Väliaikainen / Pysyvä)



Java enumin opetusohjelman työntekijä

Sitten paras vaihtoehto olisi käyttää enum. Koska enum voidaan helposti käyttää kytkimessä. enum voidaan kulkea. enum voi omistaa kentät, rakentajat ja menetelmät. Siten, se lisää käännösajan tarkistusta ja välttää virheellisistä vakioista välittämisen virheet, koska olet jo dokumentoinut, mitkä arvot ovat laillisia käytettäväksi.

Erot Enumin ja luokan välillä

Vaikka luokassa ja enumilla on samanlainen toiminnallisuus Java-ympäristössä, ne eroavat toisistaan. Keskustelkaamme eroista



Enum Luokka
Enum-vakioita ei voida ohittaaLuokan vakiot voidaan ohittaa
Enum ei tue objektien luomistaLuokka tukee objektien luomista
Enum ei voi laajentaa muita luokkiaLuokka voi laajentaa muita luokkia
enum ctyökoneen käyttöliittymäLuokka voi toteuttaa käyttöliittymän


Käytännön esimerkkejä Enumista

Jotta ymmärtäisimme enumia paljon paremmin, toteuttakaamme seuraavia käytännön esimerkkejä.

Luettelon määritteleminen Java-sovelluksessa

Enum voidaan julistaa joko luokan sisällä tai c: n ulkopuolellapäästää. Mutta sitä ei voida julistaa missään menetelmässä. Otetaan pieni esimerkki sen syntaksin, määritelmän ja ilmoituksen ymmärtämiseksi.

Syntaksi:

enum nimi {vakiot}

Tässä esimerkissä olemme ilmoittaneet main () menetelmä sisällä enum

paketin määritelmä julkinen luokka Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Ouput

KTM

Tässä esimerkissä main () menetelmä ilmoitetaan ulkopuolella enum.

paketin määrittely enum Väri {BAJAJ, KTM, YAMAHA} julkinen luokka Edureka {public static void main (String [] argumentit) {Bike b1 = Väri.YAMAHA System.out.println (b1)}}

// Tuotos:

YAMAHA

Enumia käytetään kytkentäkotelossa

Luetteloa voidaan käyttää myös kytkinlausekkeessa. On tärkeää, että kaikissa tapauslausekkeissa on käytettävä vakioita samasta enumista kuin mitä switch-lause käyttää. Tarkistetaan esimerkki tämän perusteella.

Täällä julistetaan enum, jonka elementteinä on viikonpäivät, ja välitämme tiedot merkkijonona tulostaaksesi vastaustapauksen tiedot.

pakettikytkentäinen päivä Päivä {Sunnuntai, Maanantai, Tiistai, Keskiviikko, Torstai, Perjantai, Lauantai} julkinen luokka Edureka {Päiväpäivä julkinen Edureka (päiväpäivä) {this.day = päivä} public void dayIsLike () {switch (day) {tapaus MAANANTAI: System.out.println ('Hei, tänään on maanantai') taukotapahtuma TIISTAPÄIVÄ: System.out.println ('Hei, tänään on tiistai') tauon tapaus KESKI: System.out.println ('Hei, tänään on keskiviikko ') taukotapahtuma TORSTAI: System.out.println (' Hei, tänään on torstai ') taukotapaus PERJANTA: System.out.println (' Hei, tänään on perjantai. ') taukotapa Lauantai: System.out.println (' Hei, tänään on viikonloppusi ') tauon tapaus Sunnuntai: System.out.println (' Hei, tänään on loma ') tauon oletus: System.out.println (' Anna oikea päivä. ') Tauko}} public static void main (Merkkijono [] args) {String str = 'MONDAY' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

// Tuotos:

Hei, tänään onmaanantai

Perintö enumin avulla

Pohjimmiltaan mikä tahansa enum on esitetty luokkana, joka laajentaa abstraktia luokkaa java.lang. Enum ja sillä on useita staattisia jäseniä. Siksi enum ei voi laajentaa mitään muuta luokkaa tai enum ei ole useita perinnöt . Suoritetaan esimerkki ymmärtääksemme sen paremmin.

Tässä perimme käyttöjärjestelmän puhelimen valmistajan perusteella.

paketin perintö tuonti java.util.ArrayList tuonti java.util.List julkinen luokka Edureka {public static void main (String [] args) {List perimä = uusi ArrayList () peritä.add (LibraryEnum.FIRST) peritä.add (ClientEnum. google) (HTTPMethodConvertible-elementti: peri) {System.out.println (element.getHTTPMethodType ())}} staattinen käyttöliittymä HTTPMethodConvertible {public String getHTTPMethodType ()} staattinen enum LibraryEnum toteuttaa HTTPMethodConvertible {FIRST 'Huawei'), THIRD ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} staattinen enum ClientEnum toteuttaa HTTPMethodConvertible {huawei ',' Hong ('iOS'), google ('Android One') Merkkijono httpMethodType ClientEnum (String s) {httpMethodType = s} public String getHTTPMethodType () {return httpMethodType}}}

// Tuotos:

Google Pixel
Android One

Enum mukautetuilla arvoilla

Enumeilla on oletusarvoisesti omat merkkijononsa, voimme myös määrittää joitain mukautettuja arvoja enumeille. Tarkastellaan seuraavaa esimerkkiä.

enum Liikenne {PUNAINEN ('STOP'), ORANSSI ('WAIT'), VIHREÄ ('GO')}

Yllä olevassa esimerkissä voimme nähdä, että Traffic enumilla on kolme jäsentä. Nimittäin,

VERIAPPELSIINI ja VIHREÄ joilla on omat erilaiset mukautetut arvot PYSÄYTÄ, odota ja MENNÄ vastaavasti.

Nyt kun käytämme samantyyppistä enumia koodissa, meidän odotetaan noudattavan joitain kohtia, jotka ovat:

  • Meidän on luotava parametroitu konstruktori tälle enum-luokalle. Koska tiedämme sen enum luokan objektia ei voida luoda nimenomaisesti, joten alustuksessa käytämme parametrisoitua konstruktoria.
  • rakentaja ei voi olla yleisö tai suojattu yksityinen tai oletuksena muokkaajat. Jos luot julkisen tai suojatun, se sallii useamman kuin yhden täysin vastustamattoman objektin alustamisen enum-toiminnallisuus.
  • Meidän on luotava getter-menetelmä arvon saamiseksi enums.

Suoritetaan ohjelma tämän perusteella.

pakettiliikenteen enum TrafficSignal {PUNAINEN ('STOP'), VIHREÄ ('GO'), ORANSSI ('WAIT') yksityinen merkkijono toiminta julkinen merkkijono getAction () {return this.action} yksityinen TrafficSignal (merkkijono toiminto) {this.action = action}} public class Edureka {public static void main (String args []) {TrafficSignal [] signaalit = TrafficSignal.values ​​() kohteelle (TrafficSignal signal: signaalit) {System.out.println ('nimi:' + signaali.nimi () + 'toiminto:' + signaali.getAction ())}}}

// Tuotos:

nimi: PUNAINEN toiminta: PYSÄYTÄ
nimi: VIHREÄ toiminta: GO
Urose: ORANGE-toiminto: WAIT

Lista if-else-if-lauseissa

Suoritetaan nyt ohjelma, joka perustuu luetella if-else-if lausunnoissa. Täältä löydämme kulkusuunnan kulkemalla arvot, jotka ovat käytettävissä enumissa.

paketti Reittiohjeet enum Reittiohjeet {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 ('Suunta : Pohjoinen ')} else {System.out.println (' suunta: etelä ')}}}

// Tuotos:

SanoaKuva: Pohjoinen

Eri menetelmät, joita käytetään enumin kanssa

Arvot (): Kun luot enumin, Java-kääntäjä lisää sisäisesti arvot () menetelmä. Tämä menetelmä palauttaa arvon taulukko joka sisältää kaikki enum-arvot.

//Syntaksi:

julkiset staattiset enum-tyypin [] arvot ()

Selvitämme matriisin tietyn elementin indeksiarvon.

paketin arvot enum Väri {PUNAINEN, VIHREÄ, SININEN} julkinen luokka Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() for (Väri col: arr) {System.out.println ( col + 'hakemistossa' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

// Tuotos:

miten tehdä jframe Java

PUNAINEN indeksissä 0
VIHREÄ hakemistossa 1
SININEN hakemistossa 2
NETTO

Jonkin arvo(): Tämä- menetelmää käytetään palauttamaan laskentavakio, jonka arvo on yhtä suuri kuin välitettiin argumenttina tätä menetelmää kutsuttaessa.

//Syntaksi:

public static enum-type valueF (String str)

Täältä löydät tietyn puhelimen kustannukset merkkijonolle välitetyn syötteen perusteella.

paketin arvot enum Mobile {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 ('CellPhone List:') (Mobile m: Mobile.values ​​()) {System.out.println (m + 'kustannukset' + m.showPrice () + 'dollarit' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Valittu:' + ret)}}

// Tuotos:

Samsung maksaa 1099 dollaria
Apple maksaa 1250 dollaria
Google maksaa 1325 dollaria
Valittu: Samsung

Järjestysnumero (): Java-tulkki lisää järjestysnumero () menetelmä sisäisesti, kun se luo enum. Järjestysnumero () palauttaa arvon indeksi enum-arvosta.

//Syntaksi:

julkinen finaalijärjestys ()

Täältä selvitämme matriisin tietyn elementin indeksiarvon. ja myös kirsikkahedelmän sijainti.

Pakkausjärjestyslaskenta hedelmät {Omena, banaani, kirsikka, päiväys, seljanmarja} enum Vihannekset {Porkkana, punajuuri, pavut, tomaatti, sipuli} julkinen luokka Edureka {public static void main (String [] args) {Fruits [] fru = Fruits. arvot () arvolle (Fruits fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Hedelmät f1, f2, f3 f1 = Fruits.Apple f2 = Fruits.Cherry f3 = Fruits.Apple if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'tulee' + f1: n jälkeen)} Vihannekset v1 = Vihannekset.Beetroot if (f1.equals (v1)) {System.out.println (' Väärä') } } }

// Tuotos:

Apple: 0
Banaani: 1
Kirsikka: 2
Päivämäärä: 3
Seljanmarja: 4
Kirsikka tulee Applen jälkeen

Enumin edut

  • Java: n Enum paranee tyypin turvallisuus
  • Enum on suunniteltu helposti käytettäväksi vaihtaa tapauksia
  • Enum voi olla kulkenut
  • Enumilla voi olla kentät, menetelmät, ja rakentajat
  • Enum voi toteuttaa rajapinnat
  • Enum ei voi pidentää a luokassa koska sisäisesti se ulottuu Enum luokassa

Enum Usecase: Rock, paperi, sakset peli

Käytämme enum Java-sovelluksessa lapsuuden pelin luomiseen, kivi (kivi) paperi ja sakset . Seuraava koodi selittää miten.

paketti 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 Skanneri sisään = uusi skanneri (System.in) System.out.println ('nKäynnistä nyt ... n') kun (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') looginen validInput do {System.out.print ('nSeurauksesi (Syötä s sakselle, p paperille, t kivelle, q lopettaa): n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} else if (inChar ==' s ') ) {playerMove = HandSign.SCISSOR} muu, jos (inChar == 'p') {playerMove = HandSign.PAPER} muu, jos (inChar == 't') {playerMove = HandSign.STONE} muu {System.out.println ( 'nTarkista syöttö ja yritä uudelleen! n') validInput = false}} (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIt on minun vuoroni: SCISSORn')} muuta jos (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nIm on minun vuoroni: PAPERn')} muu {computerMove = HandSign.STONE System.out.println ('nIt on minun vuoroni: STONEn')} jos (computerMove = = playerMove) {System.out.println ('nSe on tie! n') ++ numTie} muuta jos (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor leikkaa paperia , Minä voitin! N ') ++ numComputerWon} muuta, jos (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper kääri kiveä, minä voitin! N ') ++ numComputerWon} muuten, jos (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone rikkoo sakset, minä voitin! n') ++ numComputerWon} else {System.out.println ('nKiitokset. ..! Voitit! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nKokeilumäärä: '+ numTrials) System.out.printf (' Minä voitin% d (%. 2f %%) Voitit% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Hei! Toivottavasti nautit ..! ' )}}

// Tuotos:

Aloitetaanpas...
Sakset-paperi-kivi
Sinun vuorosi (kirjoita s saksen saamiseksi, p paperille, t kivelle, q lopettaa):
s
On minun vuoroni: KIVI
Kivi rikkoo sakset, voitin!
Sakset-paperi-kivi
Sinun vuorosi (kirjoita s saksen saamiseksi, p paperille, t kivelle, q lopettaa):
mitä
Kokeiden lukumäärä: 1Voitin yhden (100,00%). Voitit 0 (0,00%).
Hei !, Toivottavasti nautit ..!

Tämän myötä olemme päässeet tämän Java Enum -opetusohjelman loppuun. Toivon, että olet ymmärtänyt Java-ohjelman Enumin ja sen toteutuksen reaaliaikaisten esimerkkien avulla.

Nyt kun olet ymmärtänyt enum Tämän 'Java Enum -opetusohjelman' avulla voit tutustua perusasioihin Edureka, luotettava verkko-oppimisyritys, jolla on yli 250 000 tyytyväisen oppijan verkosto, joka levisi ympäri maailmaa. Edurekan Java J2EE- ja SOA-koulutus- ja sertifiointikurssit on suunniteltu opiskelijoille ja ammattilaisille, jotka haluavat olla Java-kehittäjiä. Kurssi on suunniteltu antamaan sinulle etumatka Java-ohjelmointiin ja kouluttamaan sekä ydin- että edistyneitä Java-käsitteitä sekä erilaisia ​​Java-kehyksiä, kuten Hibernate & kevät .

Onko sinulla kysymys meille? Mainitse se tämän “Java Enum Tutorial” -blogin kommenttiosassa, niin otamme sinuun yhteyttä mahdollisimman pian.