Java enum & enum -luokka (esimerkkien kanssa)

Tässä opetusohjelmassa opimme Java-keskusteluista. Opimme luomaan ja käyttämään enumeja ja enum-luokkia esimerkkien avulla.

Java-ohjelmassa enum (lyhenne luettelosta) on tyyppi, jolla on kiinteä vakioarvojen joukko. Käytämme enumavainsanaa ilmoittaaksesi summat. Esimerkiksi,

 enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE )

Tässä olemme luoneet enumin nimeltä Koko. Se sisältää kiinteät arvot PIENI, KESKI, SUURI ja YLIMITTÄINEN.

Näitä arvoja aaltosulkeissa kutsutaan enum-vakioiksi (arvoiksi).

Huomaa: Enum-vakiot esitetään yleensä isoilla kirjaimilla.

Esimerkki 1: Java Enum

 enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) class Main ( public static void main(String() args) ( System.out.println(Size.SMALL); System.out.println(Size.MEDIUM); ) )

Tuotos

 Pieni keskisuuri

Kuten yllä olevasta esimerkistä voidaan nähdä, käytämme enum-nimeä vakioarvojen käyttämiseen.

Voimme myös luoda enum-tyyppisiä muuttujia. Esimerkiksi,

 Size pizzaSize;

Tässä pizzaSize on kokotyypin muuttuja. Se voidaan määrittää vain 4 arvolla.

 pizzaSize = Size.SMALL; pizzaSize = Size.MEDIUM; pizzaSize = Size.LARGE; pizzaSize = Size.EXTRALARGE;

Esimerkki 2: Java Enum kytkinlausekkeella

 enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE ) class Test ( Size pizzaSize; public Test(Size pizzaSize) ( this.pizzaSize = pizzaSize; ) public void orderPizza() ( switch(pizzaSize) ( case SMALL: System.out.println("I ordered a small size pizza."); break; case MEDIUM: System.out.println("I ordered a medium size pizza."); break; default: System.out.println("I don't know which one to order."); break; ) ) ) class Main ( public static void main(String() args) ( Test t1 = new Test(Size.MEDIUM); t1.orderPizza(); ) )

Tuotos

 Tilasin keskikokoisen pizzan.

Edellä olevassa ohjelmassa olemme luoneet enum-tyypin Koko. Sitten ilmoitimme muuttuvan pizzan koon tyypistä.

Tällöin muuttujalle pizzaSize voidaan määrittää vain 4 arvoa (Pieni, Keskitaso, LARGE, YLIMITTÄINEN).

Huomaa lausunto,

 Test t1 = new Test(Size.MEDIUM);

Se kutsuu Test()rakentajan testiluokan sisään. Muuttujalle pizzaSize määritetään nyt MEDIUM-vakio.

Arvon perusteella suoritetaan yksi kytkentätapauslausekkeen tapauksista.

Enum-luokan Java

Javassa enum-tyyppejä pidetään erityistyyppisinä luokkina. Se otettiin käyttöön julkaisemalla Java 5.

Enum-luokka voi sisältää menetelmiä ja kenttiä kuten tavalliset luokat.

 enum Size ( constant1, constant2,… , constantN; // methods and fields )

Kun luomme enum-luokan, kääntäjä luo esiintymiä (objekteja) kustakin enum-vakiosta. Myös kaikki enum-vakiot ovat aina public static finaloletusarvoisesti.

Esimerkki 3: Java Enum -luokka

 enum Size( SMALL, MEDIUM, LARGE, EXTRALARGE; public String getSize() ( // this will refer to the object SMALL switch(this) ( case SMALL: return "small"; case MEDIUM: return "medium"; case LARGE: return "large"; case EXTRALARGE: return "extra large"; default: return null; ) ) public static void main(String() args) ( // call getSize() // using the object SMALL System.out.println("The size of the pizza is " + Size.SMALL.getSize()); ) )

Tuotos

 Pizzan koko on pieni

Yllä olevassa esimerkissä olemme luoneet enum-luokan Koko. Siinä on neljä vakiota PIENI, KESKI, SUURI ja YLIMITTÄINEN.

Koska Size on enum-luokka, kääntäjä luo automaattisesti esiintymät kullekin enum-vakiolle.

Tässä main()menetelmän sisällä olemme käyttäneet SMALL-esiintymää kutsumaan getSize()menetelmää.

Huomaa : Kuten tavallisissa luokissa, myös enum-luokassa voi olla rakentajia. Lisätietoja siitä on Java enum -rakentajalla.

Java Enum -luokan menetelmät

Enum-luokissa on joitain ennalta määriteltyjä menetelmiä, jotka ovat helposti käytettävissä.

1. Java Enum -järjestys ()

ordinal()Menetelmä palauttaa asemaa ENUM vakiona. Esimerkiksi,

 ordinal(SMALL) // returns 0

2. Enum vertaa ()

compareTo()Menetelmä vertaa ENUM vakiot perustuu niiden järjestysluku arvo. Esimerkiksi,

 Size.SMALL.compareTo(Size.MEDIUM) // returns ordinal(SMALL) - ordinal(MEDIUM)

3. Enum toStringiin ()

toString()Menetelmä palauttaa merkkijono esitys ENUM vakioita. Esimerkiksi,

 SMALL.toString() // returns "SMALL"

4. Enum-nimi ()

name()Metodi palauttaa määritellyn nimen ENUM vakiona merkkijono muodossa. Menetelmän palautettu arvo name()on final. Esimerkiksi,

 name(SMALL) // returns "SMALL"

5. Java Enum arvoOf ()

The valueOf() method takes a string and returns an enum constant having the same string name. For example,

 Size.valueOf("SMALL") // returns constant SMALL.

6. Enum values()

The values() method returns an array of enum type containing all the enum constants. For example,

 Size() enumArray = Size.value();

Why Java Enums?

In Java, enum was introduced to replace the use of int constants.

Suppose we have used a collection of int constants.

 class Size ( public final static int SMALL = 1; public final static int MEDIUM = 2; public final static int LARGE = 3; public final static int EXTRALARGE = 4; )

Here, the problem arises if we print the constants. It is because only the number is printed which might not be helpful.

So, instead of using int constants, we can simply use enums. For example,

 enum Size ( SMALL, MEDIUM, LARGE, EXTRALARGE )

This makes our code more intuitive.

Also, enum provides compile-time type safety.

If we declare a variable of the Size type. For example,

 Size size;

Tässä taataan, että muuttuja pitää yhden neljästä arvosta. Jos yritämme välittää muita arvoja kuin nämä neljä arvoa, kääntäjä luo virheen.

Mielenkiintoisia artikkeleita...