Tipul enum
La fel ca si clasele si interfetele, enum este un tip referinta. Acest tip a fost indrodus incepand cu versiunea 1.5 in scopul simplificarii definirii constantelor.
Declararea unui enum se face utilizand cuvantul cheie enum astfel:
- Day.java
- public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY; }
- public enum Day {
- SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
- THURSDAY, FRIDAY, SATURDAY;
- }
Un exemplu de utilizare al tipului enum definit mai sus este prezentat in continuare:
- EnumTest.java
- public class EnumTest { Day day; public EnumTest(Day day) { this.day = day; } public void tellItLikeItIs() { switch (day) { case MONDAY: System.out.println("Mondays are bad."); break; case FRIDAY: System.out.println("Fridays are better."); break; case SATURDAY: case SUNDAY: System.out.println("Weekends are best."); break; default: System.out.println("Midweek days are so-so."); break; } } public static void main(String[] args) { EnumTest firstDay = new EnumTest(Day.MONDAY); firstDay.tellItLikeItIs(); EnumTest thirdDay = new EnumTest(Day.WEDNESDAY); thirdDay.tellItLikeItIs(); EnumTest fifthDay = new EnumTest(Day.FRIDAY); fifthDay.tellItLikeItIs(); EnumTest sixthDay = new EnumTest(Day.SATURDAY); sixthDay.tellItLikeItIs(); EnumTest seventhDay = new EnumTest(Day.SUNDAY); seventhDay.tellItLikeItIs(); } }
- public class EnumTest {
- Day day;
- public EnumTest(Day day) {
- this.day = day;
- }
- public void tellItLikeItIs() {
- switch (day) {
- case MONDAY:
- break;
- case FRIDAY:
- break;
- case SATURDAY: case SUNDAY:
- break;
- default:
- break;
- }
- }
- EnumTest firstDay = new EnumTest(Day.MONDAY);
- firstDay.tellItLikeItIs();
- EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
- thirdDay.tellItLikeItIs();
- EnumTest fifthDay = new EnumTest(Day.FRIDAY);
- fifthDay.tellItLikeItIs();
- EnumTest sixthDay = new EnumTest(Day.SATURDAY);
- sixthDay.tellItLikeItIs();
- EnumTest seventhDay = new EnumTest(Day.SUNDAY);
- seventhDay.tellItLikeItIs();
- }
- }
Tipurile enum pot avea asociate de asemenea valori in momentul in care acestea sunt construite conform exemplului de mai jos:
- Currency.java
- public enum Currency { PENNY(1), NICKLE(5), DIME(10), QUARTER(25); private int value; private Currency(int value) { this.value = value; } };
- public enum Currency {
- PENNY(1), NICKLE(5), DIME(10), QUARTER(25);
- private int value;
- private Currency(int value) {
- this.value = value;
- }
- };
Dupa cum se observa am construit un tip enum care are atasata de asemenea o variabila value si un constructor pentru initializarea acelei variabile. Constructorii declarati in cadrul enum trebuie sa aiba obligatoriu specificatorul de acces private.
metoda values()
Java ataseaza automat la tipul enum metoda static values() ce returneaza un vector cu toate constantele definite. utilizand metoda values() iterarea prin lista de constante se poate face astfel:
- code
- for(Currency coin: Currency.values()){ System.out.println("coin: " + coin); }
- for(Currency coin: Currency.values()){
- }
Rezultatul executiei va fi:
- result
- coin: PENNY coin: NICKLE coin: DIME coin: QUARTER
- coin: PENNY
- coin: NICKLE
- coin: DIME
- coin: QUARTER
metoda valueOf()
Metoda valueOf() este adaugata automat in tipul enum si returneaza o constanta definita cu numele identic cu numele transmis ca argument in metoda valueOf(…).
- EnumDemo.java
- enum Mobile { Samsung(400), Nokia(250),Motorola(325); int price; Mobile(int p) { price = p; } int showPrice() { return price; } } public class EnumDemo { public static void main(String args[]) { System.out.println("CellPhone List:"); Mobile ret; ret = Mobile.valueOf("Samsung"); System.out.println("Selected : " + ret); } }
- enum Mobile {
- Samsung(400), Nokia(250),Motorola(325);
- int price;
- Mobile(int p) {
- price = p;
- }
- int showPrice() {
- return price;
- }
- }
- public class EnumDemo {
- Mobile ret;
- ret = Mobile.valueOf("Samsung");
- }
- }
Metoda valueOf() arunca IllegalArgumentException daca sirul transmis ca si argument nu este gasit in lista de constante.