Arbejde med Enum i Java
Lad os gå videre til en meget interessant og, vigtigst af alt, særegen datastruktur - enum.
Lad os se på, hvordan man opretter en enum. Oprettelsen af en enum adskiller sig markant fra andre datastrukturer, da det sker på klasseniveau:
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Praktisk Anvendelse
Enum bruges, så du nemt kan referere til konstanten. Da det er en liste af konstanter, tilgås den på følgende måde:
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 }
Her tilgås blot enum-konstanten for at forstå hvilken dag det er i dag. I stedet for at oprette mange forskellige konstanter, gemmes blot et array af konstanter i enum. Dette er bekvemt og meget praktisk. For eksempel kunne vi i en af de tidligere udfordringer have gemt afdelingsnavne i en enum og brugt konstanten som nøgle.
Lad os se på et eksempel:
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 til et array
Du kan også hente alle konstante værdier fra en enum som et array ved at bruge values()-metoden.
Lad os se på et eksempel:
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 }
Deklarering af felter og metoder i enums
Du kan også erklære felter og metoder i enums.
Lad os overveje et eksempel med et trafiklys:
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 enums fungerer metoder en smule anderledes. Da de er konstanter, kan de ikke ændres. Derfor tilføjer vi felter i konstruktøren af denne enum, hvorefter vi definerer metoden getAction(), som straks returnerer handlingen, der skal udføres for et bestemt trafiklys. Som du kan se, angiver vi denne handling direkte i enum'en, når vi opregner konstanterne.
Lad os se et eksempel på at kalde en sådan metode:
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, fik vi med hjælp fra metoden getAction() straks handlingen, der skal udføres for et bestemt trafiklys. Du kan ændre RED til en hvilken som helst anden farve og se, hvad der sker.
Metoder og felter i enums bruges ikke så ofte, men denne funktionalitet er tilgængelig, så det er godt at være opmærksom på det. Du kan læse mere om enums i Officiel Java-dokumentation
Fordele ved Enum i Java
- Forbedret læsbarhed: udskiftning af numeriske konstanter og streng-litteraler med navngivne værdier gør koden mere læsbar;
- Typesikkerhed: compileren sikrer typesikkerhed ved arbejde med enums og forhindrer type-relaterede fejl;
- Begrænset sæt af værdier: enums giver et fast sæt af værdier, hvilket gør koden mere forudsigelig;
- Mulighed for at tilføje metoder og felter: enums kan indeholde metoder og felter, hvilket gør dem mere kraftfulde sammenlignet med simple enumerationer.
1. Hvad er en enum i Java?
2. Hvordan erklærer du en enum kaldet Months, der repræsenterer årets måneder?
3. Hvordan kan du opnå et array af alle værdier i en enum kaldet Colors?
4. Hvilket af følgende udsagn om nedenstående enum er sandt?
5. Hvordan sammenlignes currentStatus korrekt med Status.ACTIVE? Overvej følgende enum:
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Fantastisk!
Completion rate forbedret til 4
Arbejde med Enum i Java
Stryg for at vise menuen
Lad os gå videre til en meget interessant og, vigtigst af alt, særegen datastruktur - enum.
Lad os se på, hvordan man opretter en enum. Oprettelsen af en enum adskiller sig markant fra andre datastrukturer, da det sker på klasseniveau:
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Praktisk Anvendelse
Enum bruges, så du nemt kan referere til konstanten. Da det er en liste af konstanter, tilgås den på følgende måde:
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 }
Her tilgås blot enum-konstanten for at forstå hvilken dag det er i dag. I stedet for at oprette mange forskellige konstanter, gemmes blot et array af konstanter i enum. Dette er bekvemt og meget praktisk. For eksempel kunne vi i en af de tidligere udfordringer have gemt afdelingsnavne i en enum og brugt konstanten som nøgle.
Lad os se på et eksempel:
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 til et array
Du kan også hente alle konstante værdier fra en enum som et array ved at bruge values()-metoden.
Lad os se på et eksempel:
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 }
Deklarering af felter og metoder i enums
Du kan også erklære felter og metoder i enums.
Lad os overveje et eksempel med et trafiklys:
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 enums fungerer metoder en smule anderledes. Da de er konstanter, kan de ikke ændres. Derfor tilføjer vi felter i konstruktøren af denne enum, hvorefter vi definerer metoden getAction(), som straks returnerer handlingen, der skal udføres for et bestemt trafiklys. Som du kan se, angiver vi denne handling direkte i enum'en, når vi opregner konstanterne.
Lad os se et eksempel på at kalde en sådan metode:
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, fik vi med hjælp fra metoden getAction() straks handlingen, der skal udføres for et bestemt trafiklys. Du kan ændre RED til en hvilken som helst anden farve og se, hvad der sker.
Metoder og felter i enums bruges ikke så ofte, men denne funktionalitet er tilgængelig, så det er godt at være opmærksom på det. Du kan læse mere om enums i Officiel Java-dokumentation
Fordele ved Enum i Java
- Forbedret læsbarhed: udskiftning af numeriske konstanter og streng-litteraler med navngivne værdier gør koden mere læsbar;
- Typesikkerhed: compileren sikrer typesikkerhed ved arbejde med enums og forhindrer type-relaterede fejl;
- Begrænset sæt af værdier: enums giver et fast sæt af værdier, hvilket gør koden mere forudsigelig;
- Mulighed for at tilføje metoder og felter: enums kan indeholde metoder og felter, hvilket gør dem mere kraftfulde sammenlignet med simple enumerationer.
1. Hvad er en enum i Java?
2. Hvordan erklærer du en enum kaldet Months, der repræsenterer årets måneder?
3. Hvordan kan du opnå et array af alle værdier i en enum kaldet Colors?
4. Hvilket af følgende udsagn om nedenstående enum er sandt?
5. Hvordan sammenlignes currentStatus korrekt med Status.ACTIVE? Overvej følgende enum:
Tak for dine kommentarer!