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

