Arbeide med Enum i Java
La oss gå videre til en annen ganske interessant og, viktigst av alt, særpreget datastruktur – enum.
La oss se på hvordan man oppretter en enum. Å opprette en enum skiller seg betydelig fra andre datastrukturer, siden det gjøres på klassenivå:
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Praktisk anvendelse
Enum brukes slik at du enkelt kan referere til konstanten. Siden det er en liste med konstanter, får du tilgang på følgende måte:
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 får vi enkelt tilgang til enum-konstanten for å forstå hvilken dag det er i dag. I stedet for å opprette mange ulike konstanter, lagrer vi bare et array av konstanter i enum. Dette er praktisk og effektivt. For eksempel, i en av de tidligere oppgavene, kunne vi lagret avdelingsnavn i en enum og brukt konstanten som nøkkel.
La oss 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 en tabell
For øvrig kan du også hente ut alle konstante verdier fra en enum som en tabell ved å bruke values()-metoden.
La oss 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 av felt og metoder i enums
Du kan også deklarere felt og metoder i enums.
La oss se på et eksempel med et trafikklys:
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 litt annerledes. Siden de er konstanter, kan de ikke endres. Derfor legger vi til felt i konstruktøren til denne enum, og deretter definerer vi metoden getAction() som umiddelbart returnerer handlingen som skal utføres for et spesifikt trafikklys. Som du ser, spesifiserer vi denne handlingen direkte i enumen når vi lister opp konstantene.
La oss se på et eksempel på å kalle en slik 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 ser, med hjelp av metoden getAction(), fikk vi umiddelbart handlingen som skal utføres for et bestemt trafikklys. Du kan endre RED til en hvilken som helst annen farge og se hva som skjer.
Metoder og felt i enums brukes ikke så ofte, men denne funksjonaliteten finnes, så det er greit å være klar over det. Du kan lese mer om enums i Offisiell Java-dokumentasjon
Fordeler med Enum i Java
- Bedre lesbarhet: å erstatte numeriske konstanter og streng-litteraler med navngitte verdier gjør koden mer lesbar;
- Typesikkerhet: kompilatoren sikrer typesikkerhet ved bruk av enums, og forhindrer type-relaterte feil;
- Begrenset sett med verdier: enums gir et fast sett med verdier, noe som gjør koden mer forutsigbar;
- Mulighet for å legge til metoder og felt: enums kan inneholde metoder og felt, noe som gjør dem kraftigere sammenlignet med enkle oppramsinger.
1. Hva er en enum i Java?
2. Hvordan deklarerer du en enum kalt Months som representerer årets måneder?
3. Hvordan kan du hente ut et array med alle verdiene i en enum kalt Colors?
4. Hvilket av følgende utsagn om følgende enum er korrekt?
5. Hvordan sammenlignes currentStatus korrekt med Status.ACTIVE? Se følgende enum:
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
What is the syntax for creating an enum in Java?
Can you show an example of how to use enums in a Java program?
What are some common use cases for enums in Java?
Fantastisk!
Completion rate forbedret til 4
Arbeide med Enum i Java
Sveip for å vise menyen
La oss gå videre til en annen ganske interessant og, viktigst av alt, særpreget datastruktur – enum.
La oss se på hvordan man oppretter en enum. Å opprette en enum skiller seg betydelig fra andre datastrukturer, siden det gjøres på klassenivå:
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Praktisk anvendelse
Enum brukes slik at du enkelt kan referere til konstanten. Siden det er en liste med konstanter, får du tilgang på følgende måte:
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 får vi enkelt tilgang til enum-konstanten for å forstå hvilken dag det er i dag. I stedet for å opprette mange ulike konstanter, lagrer vi bare et array av konstanter i enum. Dette er praktisk og effektivt. For eksempel, i en av de tidligere oppgavene, kunne vi lagret avdelingsnavn i en enum og brukt konstanten som nøkkel.
La oss 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 en tabell
For øvrig kan du også hente ut alle konstante verdier fra en enum som en tabell ved å bruke values()-metoden.
La oss 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 av felt og metoder i enums
Du kan også deklarere felt og metoder i enums.
La oss se på et eksempel med et trafikklys:
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 litt annerledes. Siden de er konstanter, kan de ikke endres. Derfor legger vi til felt i konstruktøren til denne enum, og deretter definerer vi metoden getAction() som umiddelbart returnerer handlingen som skal utføres for et spesifikt trafikklys. Som du ser, spesifiserer vi denne handlingen direkte i enumen når vi lister opp konstantene.
La oss se på et eksempel på å kalle en slik 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 ser, med hjelp av metoden getAction(), fikk vi umiddelbart handlingen som skal utføres for et bestemt trafikklys. Du kan endre RED til en hvilken som helst annen farge og se hva som skjer.
Metoder og felt i enums brukes ikke så ofte, men denne funksjonaliteten finnes, så det er greit å være klar over det. Du kan lese mer om enums i Offisiell Java-dokumentasjon
Fordeler med Enum i Java
- Bedre lesbarhet: å erstatte numeriske konstanter og streng-litteraler med navngitte verdier gjør koden mer lesbar;
- Typesikkerhet: kompilatoren sikrer typesikkerhet ved bruk av enums, og forhindrer type-relaterte feil;
- Begrenset sett med verdier: enums gir et fast sett med verdier, noe som gjør koden mer forutsigbar;
- Mulighet for å legge til metoder og felt: enums kan inneholde metoder og felt, noe som gjør dem kraftigere sammenlignet med enkle oppramsinger.
1. Hva er en enum i Java?
2. Hvordan deklarerer du en enum kalt Months som representerer årets måneder?
3. Hvordan kan du hente ut et array med alle verdiene i en enum kalt Colors?
4. Hvilket av følgende utsagn om følgende enum er korrekt?
5. Hvordan sammenlignes currentStatus korrekt med Status.ACTIVE? Se følgende enum:
Takk for tilbakemeldingene dine!