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