The Enum v Javě je datový typ, který obsahuje pevnou sadu konstant.
Lze jej použít pro dny v týdnu (NEDĚLE, PONDĚLÍ, ÚTERÝ, STŘEDA, ČTVRTEK, PÁTEK a SOBOTA), směry (NA SEVER, JIH, VÝCHOD a ZÁPAD), roční období (JARO, LÉTO, ZIMA a PODZIM nebo PODZIM ), barvy (ČERVENÁ, ŽLUTÁ, MODRÁ, ZELENÁ, BÍLÁ a ČERNÁ) atd. Podle konvence pojmenování Java bychom měli mít všechny konstanty velkými písmeny. Máme tedy výčtové konstanty velkými písmeny.
Java Enums lze považovat za třídy, které mají pevnou sadu konstant (proměnnou, která se nemění). Výčtové konstanty Java jsou statické a implicitně konečné. Je k dispozici od JDK 1.5.
govinda
Výčty se používají k vytváření vlastních datových typů, jako jsou třídy. The enum datový typ (také známý jako Enumerated Data Type) se používá k definování výčtu v Javě. Na rozdíl od C/C++ je enum v Javě více silný . Zde můžeme definovat výčet buď uvnitř třídy, nebo mimo třídu.
Java Enum interně dědí Třída Enum , takže nemůže zdědit žádnou jinou třídu, ale může implementovat mnoho rozhraní. Ve výčtu Java můžeme mít pole, konstruktory, metody a hlavní metody.
Body k zapamatování pro Java Enum
- Enum zlepšuje bezpečnost typu
- Enum lze snadno použít ve switchi
- Enum lze procházet
- Enum může mít pole, konstruktory a metody
- Enum může implementovat mnoho rozhraní, ale nemůže rozšířit žádnou třídu, protože interně rozšiřuje třídu Enum
Jednoduchý příklad Java Enum
class EnumExample1{ //defining the enum inside the class public enum Season { WINTER, SPRING, SUMMER, FALL } //main method public static void main(String[] args) { //traversing the enum for (Season s : Season.values()) System.out.println(s); }}Otestujte to hned
Výstup:
WINTER SPRING SUMMER FALL
Podívejme se na další příklad Java enum, kde používáme metody value(), valueOf() a ordinal() Java enum.
class EnumExample1{ //defining enum within class public enum Season { WINTER, SPRING, SUMMER, FALL } //creating the main method public static void main(String[] args) { //printing all enum for (Season s : Season.values()){ System.out.println(s); } System.out.println('Value of WINTER is: '+Season.valueOf('WINTER')); System.out.println('Index of WINTER is: '+Season.valueOf('WINTER').ordinal()); System.out.println('Index of SUMMER is: '+Season.valueOf('SUMMER').ordinal()); }}
Výstup:
WINTER SPRING SUMMER FALL Value of WINTER is: WINTER Index of WINTER is: 0 Index of SUMMER is: 2
Poznámka: Kompilátor Java interně přidává metody values(), valueOf() a ordinal() do výčtu v době kompilace. Interně vytvoří statickou a konečnou třídu pro enum.
Jaký je účel metody values() ve výčtu?
Kompilátor Java interně přidá metodu values() při vytváření výčtu. Metoda values() vrací pole obsahující všechny hodnoty výčtu.
Jaký je účel metody valueOf() ve výčtu?
Kompilátor Java interně přidá metodu valueOf() při vytváření výčtu. Metoda valueOf() vrací hodnotu daného konstantního enum.
Jaký je účel metody ordinal() ve výčtu?
Kompilátor Java interně přidá metodu ordinal() při vytváření výčtu. Metoda ordinal() vrací index hodnoty enum.
Definování Java Enum
Výčet lze definovat v rámci třídy nebo mimo ni, protože je podobný třídě. Středník (;) na konci výčtových konstant je volitelný. Například:
blokování reklam na youtube na Androidu
enum Season { WINTER, SPRING, SUMMER, FALL }
Nebo,
enum Season { WINTER, SPRING, SUMMER, FALL; }
Obě definice Java enum jsou stejné.
Příklad Java Enum: Definováno mimo třídu
enum Season { WINTER, SPRING, SUMMER, FALL } class EnumExample2{ public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); }}Otestujte to hned
Výstup:
WINTER
Příklad Java Enum: Definováno uvnitř třídy
class EnumExample3{ enum Season { WINTER, SPRING, SUMMER, FALL; }//semicolon(;) is optional here public static void main(String[] args) { Season s=Season.WINTER;//enum type is required to access WINTER System.out.println(s); }}Otestujte to hned
Výstup:
WINTER
Java Enum Příklad: hlavní metoda uvnitř Enum
Pokud do výčtu vložíte metodu main(), můžete výčet spustit přímo.
enum Season { WINTER, SPRING, SUMMER, FALL; public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); } }
Výstup:
WINTER
Inicializace konkrétních hodnot do výčtových konstant
Výčtové konstanty mají počáteční hodnotu, která začíná od 0, 1, 2, 3 atd. Můžeme však inicializovat konkrétní hodnotu výčtových konstant definováním polí a konstruktorů. Jak bylo uvedeno výše, Enum může mít pole, konstruktory a metody.
Příklad zadání počáteční hodnoty výčtových konstant
class EnumExample4{ enum Season{ WINTER(5), SPRING(10), SUMMER(15), FALL(20); private int value; private Season(int value){ this.value=value; } } public static void main(String args[]){ for (Season s : Season.values()) System.out.println(s+' '+s.value); }}Otestujte to hned
Výstup:
WINTER 5 SPRING 10 SUMMER 15 FALL 20
Konstruktor typu enum je soukromý. Pokud nedeklarujete soukromý kompilátor, interně vytvoří soukromý konstruktor.
enum Season{ WINTER(10),SUMMER(20); private int value; Season(int value){ this.value=value; } }
Interní kód generovaný kompilátorem pro výše uvedený příklad typu enum
final class Season extends Enum { public static Season[] values() { return (Season[])$VALUES.clone(); } public static Season valueOf(String s) { return (Season)Enum.valueOf(Season, s); } private Season(String s, int i, int j) { super(s, i); value = j; } public static final Season WINTER; public static final Season SUMMER; private int value; private static final Season $VALUES[]; static { WINTER = new Season('WINTER', 0, 10); SUMMER = new Season('SUMMER', 1, 20); $VALUES = (new Season[] { WINTER, SUMMER }); } }
Můžeme vytvořit instanci Enum pomocí nového klíčového slova?
Ne, protože obsahuje pouze soukromé konstruktory. |
Můžeme mít v Enum abstraktní metodu?
Ano, samozřejmě! můžeme mít abstraktní metody a můžeme zajistit implementaci těchto metod.
Java Enum v příkazu switch
Můžeme použít enum na příkaz switch jako v uvedeném příkladu:
parciální derivace symbol latex
Příklad použití Enum na příkaz switch
class EnumExample5{ enum Day{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY} public static void main(String args[]){ Day day=Day.MONDAY; switch(day){ case SUNDAY: System.out.println('sunday'); break; case MONDAY: System.out.println('monday'); break; default: System.out.println('other day'); } }}Otestujte to hned
Výstup:
monday