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());
}
}
}


