Výčtový typ v jazyku Java
Od verze javy 5.0 jsou k dispozici výčtové typy, které přináší především zvýšení typové bezpečnosti.
Definice a použití jednoduchého výčtového typu je podobná jako v jazycích C/C++.
Například:
enum Color { RED, GREEN, BLUE } Color color = Color.BLUE; //... switch (color) { case BLUE: //do something break; default: //do something }
Na rozdíl od C nebo C++ je enum v javě mnohem mocnější. Výše uvedenou definici si lze představovat jako zkratku za
class Color { public static final Color RED = new Color();
Od verze javy 5.0 jsou k dispozici výčtové typy, které přináší především zvýšení typové bezpečnosti.
Definice a použití jednoduchého výčtového typu je podobná jako v jazycích C/C++.
Například:
enum Color { RED, GREEN, BLUE } Color color = Color.BLUE; //... switch (color) { case BLUE: //do something break; default: //do something }
Na rozdíl od C nebo C++ je enum v javě mnohem mocnější. Výše uvedenou definici si lze představovat jako zkratku za
class Color { public static final Color RED = new Color(); public static final Color GREEN = new Color(); public static final Color BLUE = new Color(); protected Color() {} }
Proto je možné definovat uvnitř enumu metody nebo přidávat atributy, což jde vidět v následujícím příkladu.
Je zde uveden výčtový typ plemen psů. U každého plemene chceme mít uvedenou minimální váhu a výšku v kohoutku.
Navíc umí každé plemeno psa štěkat. Protože jediný československý vlčák štěká česky, přepíšeme jeho metodu bark.
Také přepíšeme metodu toString tak, aby se názvy plemen vypisovaly malými písmeny a místo podtržítek byly mezery.
enum DogTribe { GERMAN_SHAPHERD_DOG(61, 30), GIANT_SCHNAUZER(65, 32), CZECHOSLOVAKIAN_WOLFDOG(65, 26) { @Override public String bark() { return "haf-haf"; } }; public String bark() { return "bow-wow"; } public int getDogMinHeight() { return this.dogMinHeight; } public int getDogMinWeight() { return this.dogMinWeight; } @Override public String toString() { return this.name().toLowerCase().replace('_', ' '); } private DogTribe(int dogMinHeight, int dogMinWeight) { this.dogMinHeight = dogMinHeight; this.dogMinWeight = dogMinWeight; } private int dogMinHeight; //measured in cm in withers private int dogMinWeight; //measured in kg } public class Main { public static void main(String[] args) { for (DogTribe tribe: DogTribe.values()) { System.out.println(tribe); System.out.println("\tMinimal height: " + tribe.getDogMinHeight()); System.out.println("\tMinimal weight: " + tribe.getDogMinWeight()); System.out.println("\t" + tribe.bark()); } } }