Att Arbeta med Enum i Java
Låt oss gå vidare till en annan mycket intressant och, viktigast av allt, särskiljande datastruktur - enum.
Låt oss titta på hur man skapar en enum. Att skapa en enum skiljer sig avsevärt från andra datastrukturer, eftersom det görs på klassenivå:
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Praktisk tillämpning
Enum behövs för att du enkelt ska kunna referera till konstanten. Eftersom det är en lista av konstanter, får du åtkomst på följande sätt:
Main.java
123456789101112131415161718package com.example; public class Main { public static void main(String[] args) { Days today = Days.MONDAY; System.out.println(today); } } enum Days { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
Här får vi helt enkelt åtkomst till enum-konstanten för att förstå vilken dag det är idag. Istället för att skapa många olika konstanter, lagrar vi bara en array av konstanter i enum. Detta är bekvämt och mycket praktiskt. Till exempel, i en av de tidigare utmaningarna, kunde vi ha lagrat avdelningsnamn i en enum och använt konstanten som nyckel.
Låt oss titta på ett exempel:
Main.java
12345678910111213141516171819202122232425262728293031323334353637package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingEmployees = new ArrayList<>(); marketingEmployees.add("Michael"); marketingEmployees.add("Alice"); marketingEmployees.add("Jimmy"); List<String> developerEmployees = new ArrayList<>(); developerEmployees.add("Bob"); developerEmployees.add("John"); developerEmployees.add("Ryan"); List<String> analyticsEmployees = new ArrayList<>(); analyticsEmployees.add("Alexander"); analyticsEmployees.add("Ben"); Map<Departments, List<String>> company = new HashMap<>(); company.put(Departments.MARKETING, marketingEmployees); company.put(Departments.DEVELOPMENT, developerEmployees); company.put(Departments.ANALYTICS, analyticsEmployees); System.out.println("Company: " + company); } } enum Departments { MARKETING, DEVELOPMENT, ANALYTICS }
Konvertering till en array
För övrigt kan du även hämta alla konstanter från en enum som en array med hjälp av metoden values().
Låt oss titta på ett exempel:
Main.java
12345678910111213package com.example; public class Main { public static void main(String[] args) { Days[] array = Days.values(); Days monday = array[1]; System.out.println(monday); } } enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Deklarera fält och metoder i enum
Det är även möjligt att deklarera fält och metoder i enum.
Låt oss titta på ett exempel med ett trafikljus:
Main.java
12345678910111213enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
I enum fungerar metoder på ett något annorlunda sätt. Eftersom de är konstanter kan de inte ändras. Därför lägger vi till fält i konstruktorn för denna enum, och därefter definierar vi metoden getAction() som direkt returnerar åtgärden som ska utföras för ett specifikt trafikljus. Som du kan se anges denna åtgärd direkt i enumen när konstanterna deklareras.
Låt oss titta på ett exempel på hur en sådan metod anropas:
Main.java
1234567891011121314151617181920212223package com.example; public class Main { public static void main(String[] args) { TrafficLight currentLight = TrafficLight.RED; String currentAction = currentLight.getAction(); System.out.println("Action: " + currentAction); } } enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
Som du kan se, med hjälp av metoden getAction() erhölls åtgärden som ska vidtas för ett specifikt trafikljus direkt. Du kan ändra RED till någon annan färg och se vad som händer.
Metoder och fält i enum används inte så ofta, men denna funktionalitet finns, så det är bra att känna till den. Du kan läsa mer om enum i Officiell Java-dokumentation
Fördelar med Enum i Java
- Förbättrad läsbarhet: att ersätta numeriska konstanter och stränglitteraler med namngivna värden gör koden mer läsbar;
- Typsäkerhet: kompilatorn säkerställer typsäkerhet vid arbete med enum och förhindrar typrelaterade fel;
- Begränsad uppsättning värden: enum tillhandahåller en fast uppsättning värden, vilket gör koden mer förutsägbar;
- Möjlighet att lägga till metoder och fält: enum kan innehålla metoder och fält, vilket gör dem kraftfullare jämfört med enkla uppräkningar.
1. Vad är en enum i Java?
2. Hur deklarerar du en enum kallad Months som representerar årets månader?
3. Hur kan du erhålla en array med alla värden i en enum kallad Colors?
4. Vilket av följande påståenden om följande enum är sant?
5. Hur jämför du korrekt currentStatus med Status.ACTIVE? Se följande enum:
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Fantastiskt!
Completion betyg förbättrat till 4
Att Arbeta med Enum i Java
Svep för att visa menyn
Låt oss gå vidare till en annan mycket intressant och, viktigast av allt, särskiljande datastruktur - enum.
Låt oss titta på hur man skapar en enum. Att skapa en enum skiljer sig avsevärt från andra datastrukturer, eftersom det görs på klassenivå:
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Praktisk tillämpning
Enum behövs för att du enkelt ska kunna referera till konstanten. Eftersom det är en lista av konstanter, får du åtkomst på följande sätt:
Main.java
123456789101112131415161718package com.example; public class Main { public static void main(String[] args) { Days today = Days.MONDAY; System.out.println(today); } } enum Days { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
Här får vi helt enkelt åtkomst till enum-konstanten för att förstå vilken dag det är idag. Istället för att skapa många olika konstanter, lagrar vi bara en array av konstanter i enum. Detta är bekvämt och mycket praktiskt. Till exempel, i en av de tidigare utmaningarna, kunde vi ha lagrat avdelningsnamn i en enum och använt konstanten som nyckel.
Låt oss titta på ett exempel:
Main.java
12345678910111213141516171819202122232425262728293031323334353637package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingEmployees = new ArrayList<>(); marketingEmployees.add("Michael"); marketingEmployees.add("Alice"); marketingEmployees.add("Jimmy"); List<String> developerEmployees = new ArrayList<>(); developerEmployees.add("Bob"); developerEmployees.add("John"); developerEmployees.add("Ryan"); List<String> analyticsEmployees = new ArrayList<>(); analyticsEmployees.add("Alexander"); analyticsEmployees.add("Ben"); Map<Departments, List<String>> company = new HashMap<>(); company.put(Departments.MARKETING, marketingEmployees); company.put(Departments.DEVELOPMENT, developerEmployees); company.put(Departments.ANALYTICS, analyticsEmployees); System.out.println("Company: " + company); } } enum Departments { MARKETING, DEVELOPMENT, ANALYTICS }
Konvertering till en array
För övrigt kan du även hämta alla konstanter från en enum som en array med hjälp av metoden values().
Låt oss titta på ett exempel:
Main.java
12345678910111213package com.example; public class Main { public static void main(String[] args) { Days[] array = Days.values(); Days monday = array[1]; System.out.println(monday); } } enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Deklarera fält och metoder i enum
Det är även möjligt att deklarera fält och metoder i enum.
Låt oss titta på ett exempel med ett trafikljus:
Main.java
12345678910111213enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
I enum fungerar metoder på ett något annorlunda sätt. Eftersom de är konstanter kan de inte ändras. Därför lägger vi till fält i konstruktorn för denna enum, och därefter definierar vi metoden getAction() som direkt returnerar åtgärden som ska utföras för ett specifikt trafikljus. Som du kan se anges denna åtgärd direkt i enumen när konstanterna deklareras.
Låt oss titta på ett exempel på hur en sådan metod anropas:
Main.java
1234567891011121314151617181920212223package com.example; public class Main { public static void main(String[] args) { TrafficLight currentLight = TrafficLight.RED; String currentAction = currentLight.getAction(); System.out.println("Action: " + currentAction); } } enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
Som du kan se, med hjälp av metoden getAction() erhölls åtgärden som ska vidtas för ett specifikt trafikljus direkt. Du kan ändra RED till någon annan färg och se vad som händer.
Metoder och fält i enum används inte så ofta, men denna funktionalitet finns, så det är bra att känna till den. Du kan läsa mer om enum i Officiell Java-dokumentation
Fördelar med Enum i Java
- Förbättrad läsbarhet: att ersätta numeriska konstanter och stränglitteraler med namngivna värden gör koden mer läsbar;
- Typsäkerhet: kompilatorn säkerställer typsäkerhet vid arbete med enum och förhindrar typrelaterade fel;
- Begränsad uppsättning värden: enum tillhandahåller en fast uppsättning värden, vilket gör koden mer förutsägbar;
- Möjlighet att lägga till metoder och fält: enum kan innehålla metoder och fält, vilket gör dem kraftfullare jämfört med enkla uppräkningar.
1. Vad är en enum i Java?
2. Hur deklarerar du en enum kallad Months som representerar årets månader?
3. Hur kan du erhålla en array med alla värden i en enum kallad Colors?
4. Vilket av följande påståenden om följande enum är sant?
5. Hur jämför du korrekt currentStatus med Status.ACTIVE? Se följande enum:
Tack för dina kommentarer!