Tutorial Java Enum: què és i com implementar-lo?



Aquest article sobre Java Enum Tutorial us proporcionarà un coneixement detallat de les constants Enum juntament amb exemples pràctics per a una millor comprensió.

El Enumeració a és una manera de definir una classe amb constants fixes i anomenades amb les seves respectives utilitzant la paraula clau enum. En aquest ' Tutorial Java Enum ”Article, ho aprendremdefineix Enumeració juntament ambexemples per a una millor comprensió.

Què és l'enumeració?

Java Enums són classes que tenen un conjunt fix de constants o variables que no tendeixen a canviar. L’enumeració a Java s’aconsegueix mitjançant la paraula clau enum. El Java enum les constants són estàtic i final implícitament. La funció Enum està disponible des de JDK versió 1.5.





Per què necessitem una enumeració?

enum millora la seguretat dels tipus en la comprovació del temps de compilació per evitar errors en temps d’execució evitant el codi de la caldera. Per exemple, si heu de seleccionar una possibilitat del menor nombre d’opcions disponibles, digueu:

Feina Tipus: (Contracte / Temporal / Permanent)



Empleat del tutorial Java enum

Llavors, la millor opció seria utilitzar un fitxer enum. Perquè enum es pot utilitzar fàcilment al commutador. enum es pot recórrer. enum llauna tenir camps, constructors i mètodes. Per tant, augmenta la comprovació del temps de compilació i evita els errors deguts al pas de constants no vàlides, ja que ja heu documentat quins valors són legals per utilitzar.

com escriure el mètode de publicació en Java

Diferències entre Enum i Class

Tot i que una classe i un enum tenen una funcionalitat similar a l'entorn Java, es diferencien en alguns aspectes. Analitzem les diferències



Enum Classe
Les constants enum no es poden anul·larLes constants de classe es poden anul·lar
Enum no admet la creació d'objectesLa classe dóna suport a la creació d'objectes
Enum no pot ampliar altres classesUna classe pot ampliar altres classes
enum cuna interfície d’implementUna classe pot implementar la interfície


Exemples pràctics d'Enum

Ara, per entendre l'enum d'una manera molt millor, executem alguns exemples pràctics basats en el següent.

Definició de l’enumeració a Java

Enum es pot declarar dins d'una classe o fora d'un cdeixar. Però no es pot declarar dins de cap mètode. Prenem un petit exemple per comprendre la seva sintaxi, definició i declaració.

Sintaxi:

nom enum {constants}

En aquest exemple, hem declarat el fitxer main () mètode dins enum

definició del paquet classe pública Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Ouput

KTM

En aquest exemple, el fitxer main () es declara el mètode fora d'enum.

definició del paquet enum Color {BAJAJ, KTM, YAMAHA} public class Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

// Sortida:

YAMAHA

Enum que s’utilitza a Switch Case

L'enumeració també es pot utilitzar en una instrucció switch. És important que totes les sentències de cas hagin d’utilitzar constants del mateix enum que la sentència switch. Vegem un exemple basat en això.

Aquí declararem un enum amb els dies de la setmana com a elements i passarem les dades en forma de cadena per imprimir les dades del cas coincident.

paquet commutat enum Dia {DIUMENGE, DILLUNS, DIMARTS, DIMECRES, DIJOUS, DIVENDRES, DISSABTE} public class Edureka {Day day public Edureka (Day day) {this.day = day} public void dayIsLike () {switch (day) {case DILLUNS: System.out.println ('Hola, avui és dilluns') cas de pausa DIMARTS: System.out.println ('Hola, avui és dimarts') cas de pausa DIMECRES: System.out.println ('Hola, avui és dimecres ') break case DIJOUS: System.out.println (' Hola, avui és dijous ') break case DIVENDRES: System.out.println (' Hola, avui és divendres. ') break case DISSABTE: System.out.println (' Hola, avui és el vostre cap de setmana ') cas de pausa DIUMENGE: System.out.println (' Hola, avui és un dia festiu ') pausa per defecte: System.out.println (' Introduïu un dia vàlid. ') Pausa}} public static void main (String [] args) {String str = 'DILLUNS' Edureka e1 = Edureka nova (Day.valueOf (str)) e1.dayIsLike ()}}

// Sortida:

Hola, avui ho ésDilluns

Herència mitjançant enum

Bàsicament, qualsevol enum es representa com una classe que amplia la classe abstracta java.lang. Enum i té diversos membres estàtics. Per tant, un enum no pot ampliar cap altra classe o enum no hi ha múltiples herències . Executem un exemple per entendre’l d’una manera millor.

Aquí heretarem el sistema operatiu basat en el fabricant de telèfons.

es pot fer una gran quantitat d'objectes a Java
importació de paquets herència java.util.ArrayList importació java.util.List classe pública Edureka {public static void main (String [] args) {Llista inherit = new ArrayList () inherit.add (LibraryEnum.FIRST) inherit.add (ClientEnum. google) per a (element HTTPMethodConvertible: inherit) {System.out.println (element.getHTTPMethodType ())}} interfície estàtica HTTPMethodConvertible {public String getHTTPMethodType ()} enum estàtic LibraryEnum implementa HTTPMethodConvertible {FIRST ('Google Pixel'), SECOND ('Google Pixel'), SECOND ( 'Huawei'), TERCERA ('Apple 11 Pro') Cadena httpMethodType LibraryEnum (telèfon de cadena) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} enum estàtic ClientEnum implementa HTTPMethodConvertible {huawei ('HongMing OS') ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} public String getHTTPMethodType () {return httpMethodType}}}

// Sortida:

Google Pixel
Android One

Enumereu amb valors personalitzats

Les enumeracions tenen els seus propis valors de cadena per defecte, també podem assignar alguns valors personalitzats a les enumeracions. Considerem l'exemple següent.

enum Traffic {RED ('STOP'), TARONJA ('WAIT'), VERD ('GO')}

A l'exemple anterior, podem veure que Traffic enum té tres membres. És a dir,

VERMELL, TARONJA i VERD amb tenen els seus propis valors personalitzats diferents PARA, ESPERA i VA respectivament.

Ara, per utilitzar el mateix tipus d’enumeració al codi, se suposa que haurem de seguir alguns punts que són:

  • Hem de crear constructor parametritzat per a aquesta classe enum. Perquè ho sabem enum l’objecte de la classe no es pot crear explícitament, de manera que per inicialitzar utilitzem un constructor parametritzat.
  • El constructor no pot ser el públic ni el protegit que ha de tenir privat o bé per defecte modificadors. Si creem públic o protegit, permetrà inicialitzar més d’un objecte totalment en contra funcionalitat enum.
  • Hem de crear un mètode getter per obtenir el valor de enumeracions.

Executem un programa basat en això.

paquet de trànsit enum TrafficSignal {RED ('STOP'), GREEN ('GO'), ORANGE ('WAIT') private String action public String getAction () {return this.action} private TrafficSignal (String action) {this.action = action}} public class Edureka {public static void main (String args []) {TrafficSignal [] signals = TrafficSignal.values ​​() for (TrafficSignal signal: signals) {System.out.println ('name:' + signal.name () + 'action:' + signal.getAction ())}}}

// Sortida:

nom: acció VERMELL: STOP
nom: VERD acció: GO
masculíe: Acció TARONJA: ESPERA

Enumereu en declaracions if-else-if

Ara, executem un programa basat en enum en declaracions if-else-if. Aquí trobarem la direcció del recorregut passant els valors de les direccions disponibles a l’enumeració.

package Directions enum Directions {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 : Nord ')} else {System.out.println (' Direcció: Sud ')}}}

// Sortida:

Diguesció: nord

Diferents mètodes utilitzats amb enum

Valors (): Quan creeu un enum, el fitxer Compilador de Java afegeix internament el fitxer values ​​() mètode. Aquest mètode retorna un fitxer matriu que conté tots els valors de l'enum.

// Sintaxi:

valors públics de tipus enum [] ()

Esbrinarem el valor de l’índex d’un element concret d’una matriu.

paquets valors enum Color {RED, GREEN, BLUE} public class Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() for (Color col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

// Sortida:

VERMELL a l’índex 0
VERD a l’índex 1
BLAU a l’índex 2
XARXA

El valor de(): AixòS'utilitza el mètode per retornar la constant d'enumeració el valor de la qual és igual a va passar com a argument mentre es cridava aquest mètode.

// Sintaxi:

valor estàtic públic de tipus enumOf (String str)

Aquí trobarem el cost d’un telèfon concret en funció de l’entrada que passem a la cadena.

valors del paquet 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:') for (Mobile m: Mobile.values ​​()) {System.out.println (m + 'costs' + m.showPrice () + 'dollars' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Selected:' + ret)}}

// Sortida:

Samsung costa 1099 dòlars
Apple costa 1250 dòlars
Google costa 1325 dòlars
Seleccionat: Samsung

com instal·lar hadoop a Linux

Ordinal (): L'intèrpret de Java afegeix el fitxer ordinal () mètode intern quan crea un fitxer enum. El mètode ordinal () retorna el fitxer índex del valor enum.

// Sintaxi:

públic final int ordinal ()

Aquí descobrirem el valor de l’índex d’un element concret d’una matriu. i també, la posició del cirerer.

Paquet ordinal enum Fruits {Apple, Banana, Cherry, Date, Elderberry} enum Vegetals {Pastanaga, remolatxa, mongetes, tomàquet, ceba} public class Edureka {public static void main (String [] args) {Fruits [] fru = Fruits. values ​​() for (Fruits fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Fruits f1, f2, f3 f1 = Fruits.Apple f2 = Fruits.Cherry f3 = Fruits.Apple if (f2.compareTo (f1)> 0) {System.out.println (f2 + 've després de' + f1)} Vegetals v1 = Vegetables.Beetroot if (f1.equals (v1)) {System.out.println (' Incorrecte ')}}}

// Sortida:

Apple: 0
Plàtan: 1
Cirera: 2
Data: 3
Saüc: 4
Cherry ve després d’Apple

Avantatges d'Enum

  • Enum a Java millora tipus de seguretat
  • Enum està dissenyat per utilitzar-lo fàcilment canviar casos
  • Enum pot ser travessat
  • Enum pot tenir camps, mètodes, i constructors
  • Enum es pot implementar interfícies
  • Enum no pot ampliar a classe perquè internament s’estén Enum classe

Enum Usecase: Joc de roca, paper, tisores

Utilitzarem enum a Java per crear el nostre joc infantil, el paper de roca (pedra) i les tisores . El següent codi explica com.

paquet Edureka importació java.util.Random importació 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 Scanner in = nou escàner (System.in) System.out.println ('n Comencem ... n') mentre (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nEl vostre torn (Introduïu s per a una tisora, p per a paper, t per a pedra, q per sortir): 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 ( 'nComproveu l'entrada i torneu-ho a provar! n') validInput = false}} while (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nÉs el meu torn: SCISSORn')} else if (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nÉs el meu torn: PAPERn')} else {computerMove = HandSign.STONE System.out.println ('nÉs el meu torn: STONEn')} si (computerMove = = playerMove) {System.out.println ('nIt's a Tie! n') ++ numTie} else if (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor talla paper , He guanyat! N ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper embolcalla pedra, he guanyat! N ') ++ numComputerWon} else if (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone trenca la tisora, he guanyat! n') ++ numComputerWon} else {System.out.println ('nCongratulations. ..! Heu guanyat! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nEl nombre de proves: '+ numTrials) System.out.printf (' He guanyat% d (%. 2f %%) . Heu guanyat% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println ('Adéu, espero que us hagi agradat ..!' )}}

// Sortida:

Comencem ...
Tisora-Paper-Pedra
El vostre torn (si us plau, introduïu s per a una tisora, p per a paper, t per a pedra, q per deixar de fumar):
s
És el meu torn: PEDRA
La pedra trenca les tisores, he guanyat!
Tisora-Paper-Pedra
El vostre torn (si us plau, introduïu s per a una tisora, p per a paper, t per a pedra, q per deixar de fumar):
q
Nombre de proves: 1 He guanyat 1 (100,00%). Heu guanyat 0 (0,00%).
Adéu, espero que us hagi agradat ..!

Amb això, arribem al final d’aquest tutorial de Java Enum. Espero que hagueu entès l'Enum a Java i la seva implementació a través d'alguns exemples en temps real.

Ara que ho has entès enum bàsics a través d'aquest 'Tutorial Java Enum' consulteu el per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. Els cursos de formació i certificació Java J2EE i SOA d’Edureka estan dissenyats per a estudiants i professionals que volen ser desenvolupadors de Java. El curs està dissenyat per donar-vos un avantatge en la programació de Java i formar-vos tant per a conceptes Java bàsics com avançats, juntament amb diversos marcs Java com Hibernate i Primavera .

Tens alguna pregunta? Esmenteu-lo a la secció de comentaris d’aquest bloc “Tutorial Java Enum” i us respondrem el més aviat possible.