Enum-tyyppien Käsittely Javassa
Siirrytään seuraavaksi toiseen varsin mielenkiintoiseen ja ennen kaikkea erottuvaan tietorakenteeseen – enum-tyyppiin.
Tarkastellaanpa enum-tyypin luomista. enum-tyypin luominen poikkeaa merkittävästi muista tietorakenteista, sillä se tehdään luokkatasolla:
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Käytännön sovellus
Enum tarvitaan, jotta voit helposti viitata vakioon. Koska kyseessä on lista vakioista, siihen viitataan seuraavasti:
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 }
Tässä yksinkertaisesti viitataan enum-vakioon, jotta voidaan selvittää mikä päivä tänään on. Sen sijaan, että loisimme monta eri vakiota, tallennamme vain joukon vakioita enum-rakenteeseen. Tämä on kätevää ja erittäin käytännöllistä. Esimerkiksi yhdessä aiemmista haasteista olisimme voineet tallentaa osastojen nimet enum-rakenteeseen ja käyttää vakiota avaimena.
Tarkastellaan esimerkkiä:
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 }
Muuntaminen taulukoksi
Voit myös hakea kaikki enum-tyypin vakiot taulukkona käyttämällä values()-metodia.
Tarkastellaan esimerkkiä:
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 }
Kenttien ja metodien määrittely enum-luokissa
Enum-luokissa voidaan määritellä myös kenttiä ja metodeja.
Tarkastellaan esimerkkiä liikennevaloista:
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; } }
Enum-luokissa metodit toimivat hieman eri tavalla. Koska ne ovat vakioita, niitä ei voi muuttaa. Siksi lisäämme kentät tämän enum-luokan konstruktoriin, minkä jälkeen määrittelemme getAction()-metodin, joka palauttaa välittömästi toiminnon, joka tulee suorittaa tietylle liikennevalolle. Kuten huomaat, määrittelemme tämän toiminnon suoraan enum-luokassa vakioita lueteltaessa.
Tarkastellaan esimerkkiä tällaisen metodin kutsumisesta:
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; } }
Kuten huomaat, getAction()-menetelmän avulla saimme välittömästi liikennevalon tiettyyn väriin liittyvän toimenpiteen. Voit muuttaa RED-arvon miksi tahansa muuksi väriksi ja tarkastella tulosta.
Enumien metodeja ja kenttiä ei käytetä kovin usein, mutta tämä ominaisuus on olemassa, joten siitä on hyvä olla tietoinen. Voit lukea lisää enum-tyypeistä Virallisesta Java-dokumentaatiosta
Enum-tyyppien edut Javassa
- Parannettu luettavuus: numeeristen vakioiden ja merkkijonolitteraalien korvaaminen nimetyillä arvoilla tekee koodista helpommin luettavaa;
- Tyyppiturvallisuus: kääntäjä varmistaa tyyppiturvallisuuden enumien kanssa työskenneltäessä, mikä ehkäisee tyyppivirheitä;
- Rajoitettu arvojoukko: enumit tarjoavat kiinteän arvojoukon, mikä tekee koodista ennustettavampaa;
- Mahdollisuus lisätä metodeja ja kenttiä: enumit voivat sisältää metodeja ja kenttiä, mikä tekee niistä tehokkaampia kuin yksinkertaiset enumeraatiot.
1. Mikä on enum Java-ohjelmoinnissa?
2. Kuinka määritellään enum nimeltä Months, joka edustaa vuoden kuukausia?
3. Miten saat taulukon kaikista enum-tyypin Colors arvoista?
4. Mikä seuraavista väittämistä alla olevasta enumista on tosi?
5. Miten vertailet oikein currentStatus-arvoa Status.ACTIVE-arvoon? Tarkastele seuraavaa enumia:
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Mahtavaa!
Completion arvosana parantunut arvoon 4
Enum-tyyppien Käsittely Javassa
Pyyhkäise näyttääksesi valikon
Siirrytään seuraavaksi toiseen varsin mielenkiintoiseen ja ennen kaikkea erottuvaan tietorakenteeseen – enum-tyyppiin.
Tarkastellaanpa enum-tyypin luomista. enum-tyypin luominen poikkeaa merkittävästi muista tietorakenteista, sillä se tehdään luokkatasolla:
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Käytännön sovellus
Enum tarvitaan, jotta voit helposti viitata vakioon. Koska kyseessä on lista vakioista, siihen viitataan seuraavasti:
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 }
Tässä yksinkertaisesti viitataan enum-vakioon, jotta voidaan selvittää mikä päivä tänään on. Sen sijaan, että loisimme monta eri vakiota, tallennamme vain joukon vakioita enum-rakenteeseen. Tämä on kätevää ja erittäin käytännöllistä. Esimerkiksi yhdessä aiemmista haasteista olisimme voineet tallentaa osastojen nimet enum-rakenteeseen ja käyttää vakiota avaimena.
Tarkastellaan esimerkkiä:
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 }
Muuntaminen taulukoksi
Voit myös hakea kaikki enum-tyypin vakiot taulukkona käyttämällä values()-metodia.
Tarkastellaan esimerkkiä:
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 }
Kenttien ja metodien määrittely enum-luokissa
Enum-luokissa voidaan määritellä myös kenttiä ja metodeja.
Tarkastellaan esimerkkiä liikennevaloista:
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; } }
Enum-luokissa metodit toimivat hieman eri tavalla. Koska ne ovat vakioita, niitä ei voi muuttaa. Siksi lisäämme kentät tämän enum-luokan konstruktoriin, minkä jälkeen määrittelemme getAction()-metodin, joka palauttaa välittömästi toiminnon, joka tulee suorittaa tietylle liikennevalolle. Kuten huomaat, määrittelemme tämän toiminnon suoraan enum-luokassa vakioita lueteltaessa.
Tarkastellaan esimerkkiä tällaisen metodin kutsumisesta:
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; } }
Kuten huomaat, getAction()-menetelmän avulla saimme välittömästi liikennevalon tiettyyn väriin liittyvän toimenpiteen. Voit muuttaa RED-arvon miksi tahansa muuksi väriksi ja tarkastella tulosta.
Enumien metodeja ja kenttiä ei käytetä kovin usein, mutta tämä ominaisuus on olemassa, joten siitä on hyvä olla tietoinen. Voit lukea lisää enum-tyypeistä Virallisesta Java-dokumentaatiosta
Enum-tyyppien edut Javassa
- Parannettu luettavuus: numeeristen vakioiden ja merkkijonolitteraalien korvaaminen nimetyillä arvoilla tekee koodista helpommin luettavaa;
- Tyyppiturvallisuus: kääntäjä varmistaa tyyppiturvallisuuden enumien kanssa työskenneltäessä, mikä ehkäisee tyyppivirheitä;
- Rajoitettu arvojoukko: enumit tarjoavat kiinteän arvojoukon, mikä tekee koodista ennustettavampaa;
- Mahdollisuus lisätä metodeja ja kenttiä: enumit voivat sisältää metodeja ja kenttiä, mikä tekee niistä tehokkaampia kuin yksinkertaiset enumeraatiot.
1. Mikä on enum Java-ohjelmoinnissa?
2. Kuinka määritellään enum nimeltä Months, joka edustaa vuoden kuukausia?
3. Miten saat taulukon kaikista enum-tyypin Colors arvoista?
4. Mikä seuraavista väittämistä alla olevasta enumista on tosi?
5. Miten vertailet oikein currentStatus-arvoa Status.ACTIVE-arvoon? Tarkastele seuraavaa enumia:
Kiitos palautteestasi!