Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Enum-tyyppien Käsittely Javassa | Edistyneet Java-Ominaisuudet ja -Tekniikat
Java-tietorakenteet

bookEnum-tyyppien Käsittely Javassa

Siirrytään seuraavaksi toiseen varsin mielenkiintoiseen ja ennen kaikkea erottuvaan tietorakenteeseenenum-tyyppiin.

Tarkastellaanpa enum-tyypin luomista. enum-tyypin luominen poikkeaa merkittävästi muista tietorakenteista, sillä se tehdään luokkatasolla:

DaysOfTheWeek.java

DaysOfTheWeek.java

copy
123456789
public 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

Main.java

copy
123456789101112131415161718
package 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

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637
package 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

Main.java

copy
12345678910111213
package 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

Main.java

copy
12345678910111213
enum 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

Main.java

copy
1234567891011121314151617181920212223
package 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

  1. Parannettu luettavuus: numeeristen vakioiden ja merkkijonolitteraalien korvaaminen nimetyillä arvoilla tekee koodista helpommin luettavaa;
  2. Tyyppiturvallisuus: kääntäjä varmistaa tyyppiturvallisuuden enumien kanssa työskenneltäessä, mikä ehkäisee tyyppivirheitä;
  3. Rajoitettu arvojoukko: enumit tarjoavat kiinteän arvojoukon, mikä tekee koodista ennustettavampaa;
  4. 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:

question mark

Mikä on enum Java-ohjelmoinnissa?

Select the correct answer

question mark

Kuinka määritellään enum nimeltä Months, joka edustaa vuoden kuukausia?

Select the correct answer

question mark

Miten saat taulukon kaikista enum-tyypin Colors arvoista?

Select the correct answer

question mark

Mikä seuraavista väittämistä alla olevasta enumista on tosi?

Select the correct answer

question mark

Miten vertailet oikein currentStatus-arvoa Status.ACTIVE-arvoon? Tarkastele seuraavaa enumia:

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 1

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

bookEnum-tyyppien Käsittely Javassa

Pyyhkäise näyttääksesi valikon

Siirrytään seuraavaksi toiseen varsin mielenkiintoiseen ja ennen kaikkea erottuvaan tietorakenteeseenenum-tyyppiin.

Tarkastellaanpa enum-tyypin luomista. enum-tyypin luominen poikkeaa merkittävästi muista tietorakenteista, sillä se tehdään luokkatasolla:

DaysOfTheWeek.java

DaysOfTheWeek.java

copy
123456789
public 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

Main.java

copy
123456789101112131415161718
package 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

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637
package 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

Main.java

copy
12345678910111213
package 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

Main.java

copy
12345678910111213
enum 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

Main.java

copy
1234567891011121314151617181920212223
package 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

  1. Parannettu luettavuus: numeeristen vakioiden ja merkkijonolitteraalien korvaaminen nimetyillä arvoilla tekee koodista helpommin luettavaa;
  2. Tyyppiturvallisuus: kääntäjä varmistaa tyyppiturvallisuuden enumien kanssa työskenneltäessä, mikä ehkäisee tyyppivirheitä;
  3. Rajoitettu arvojoukko: enumit tarjoavat kiinteän arvojoukon, mikä tekee koodista ennustettavampaa;
  4. 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:

question mark

Mikä on enum Java-ohjelmoinnissa?

Select the correct answer

question mark

Kuinka määritellään enum nimeltä Months, joka edustaa vuoden kuukausia?

Select the correct answer

question mark

Miten saat taulukon kaikista enum-tyypin Colors arvoista?

Select the correct answer

question mark

Mikä seuraavista väittämistä alla olevasta enumista on tosi?

Select the correct answer

question mark

Miten vertailet oikein currentStatus-arvoa Status.ACTIVE-arvoon? Tarkastele seuraavaa enumia:

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 1
some-alt