Typy enum - wyliczenia

 

Typ enum to specjalny typ danych dzięki któremu zmienna może przyjmować wartości z wstępnie zdefiniowanego zbioru stałych wartości. Powszechnie używane przykłady takich zbiorów to nazwy dni tygodnia, lub nazwy planet w układzie słonecznym. Typu enum używamy wszędzie tam, gdzie zmienna reprezentuje niezmienny i z góry określony zestaw znanych i stałych wartości - np. nazwy wszystkich dostępnych opcji menu.

 

Przykładowa deklaracja prostego typu enum. Ponieważ w typie enum definiujemy stałe wartości, ich nazwy zapisujemy przy użyciu wielkich liter.

public enum MenuOption {
    FILE, EDIT, VEIW, TOOLS,
    SETTINGS, HELP 
}

 

Użycie prostego typu enum:

public class MenuOptionsEnumTestProgram {
    MenuOption option;
    
    public MenuOptionsEnumTestProgram( MenuOption option ) {
        this.option = option;
    }
    
    public void describeOption() {
        switch( option ) {
            case FILE:
                System.out.println("File menu option");
                break;
                    
            case EDIT:
                System.out.println("Edit menu option");
                break;
                         
            case VEIW: 
            case TOOLS:
                System.out.println("View or Tools menu option");
                break;
                        
            default:
                System.out.println("Settings or Help menu option");
                break;
        }
    }
    
    public static void main( String... args ) {
        MenuOptionsEnumTestProgram option1 = new MenuOptionsEnumTestProgram( MenuOption.FILE );
        option1.describeOption();
        MenuOptionsEnumTestProgram option2 = new MenuOptionsEnumTestProgram( MenuOption.EDIT );
        option2.describeOption();
        MenuOptionsEnumTestProgram option3 = new MenuOptionsEnumTestProgram( MenuOption.VEIW );
        option3.describeOption();
        MenuOptionsEnumTestProgram option4 = new MenuOptionsEnumTestProgram( MenuOption.TOOLS );
        option4.describeOption();
        MenuOptionsEnumTestProgram option5 = new MenuOptionsEnumTestProgram( MenuOption.SETTINGS );
        option5.describeOption();
    }
}

 

Typ enum w języku Java jest bardzo rozbudowany. Deklaracja typu enum definiuje w rzeczywistości klasę, w której oprócz stałych wartości mogą być zdefiniowane dodatkowe atrybuty i metody. Podczas tworzenia typu enum kompilator automatycznie dodaje kilka metod - np. statyczną metodę values(), która zwraca tablicę wszystkich zdefiniowanych wartości w kolejności, w jakiej zostały zadeklarowane. Ta metoda umożliwia wykonanie iteracji po wszystkich wartościach danego typu enum np. przy użyciu mechanizmu (pętli) foreach - patrz pętle - for, while, do..while, foreach.

 

Prosty przykład iteracji po elementach struktury enum:

enum WeekDay {
	 Monday, Tuesday, Wednesday
}
 


public class WeekDaysProgram {

	public static void main( String... a ) {
		for( WeekDay element : WeekDay.values() ) 
			System.out.println( element );
	}
}

 

Użycie struktury enum jak klasy:

enum WeekDay {
	Monday(1,2), 
	Tuesday(3,4), 
	Wednesday(5,6),
	Thursday(7);    // Możemy użyć dowolnego dostępnego konstruktora

	private int a;
	public int b; 

	WeekDay( int a ) { // Konstruktor jedno-parametrowy
		this.a = a; 
	}

	WeekDay( int a, int b ) { // Konstruktor dwu-parametrowy
		this.a = a; 
		this.b = b;
	}

	public int geta() {
		return a;
	}
}
 


public class WeekDaysProgram {

	public static void main( String... a ) {
		for( WeekDay element : WeekDay.values() ) 
			System.out.println( element + " - " + element.geta() + " : " + element.b );
	}

}