Intálás az Enum-ba Java-ban

1. Áttekintés

Ebben az oktatóanyagban röviden áttekintjük az an int Java-ban egy enum értékre. Habár nincs közvetlen módja a castingnak, van pár módja annak közelítésére.

2. Használata Enum#értékek

Először nézzük meg, hogyan oldhatjuk meg ezt a problémát a Enum’S értékek módszer.

Kezdjük egy enum létrehozásával PizzaStatus amely meghatározza a pizza megrendelés állapotát:

public enum PizzaStatus {RENDELT (5), KÉSZ (2), SZÁLLÍTOTT (0); private int timeToDelivery; PizzaStatus (int timeToDelivery) {this.timeToDelivery = timeToDelivery; } // Az timeToDelivery változót lekérő módszer. }

Minden állandó enum értéket társítunk a timeToDelivery terület. Az állandó összegek meghatározásakor átadjuk a timeToDelivery mezőt a kivitelezőnek.

A statikus értékek A metódus egy tömböt ad vissza, amely tartalmazza az enum összes értékét a deklaráció sorrendjében. Ezért használhatjuk a timeToDelivery egész szám a megfelelő enum érték megszerzéséhez:

int timeToDeliveryForOrderedPizzaStatus = 5; PizzaStatus pizzaOrderedStatus = null; for (PizzaStatus pizzaStatus: PizzaStatus.values ​​()) {if (pizzaStatus.getTimeToDelivery () == timeToDeliveryForOrderedPizzaStatus) {pizzaOrderedStatus = pizzaStatus; }} assertThat (pizzaOrderedStatus) .isEqualTo (PizzaStatus.ORDERED);

Itt egy tömböt használunk, amelyet a PizzaStatus.values ​​() hogy megtalálja a megfelelő értéket a timeToDelivery ingatlan.

Ez a megközelítés azonban meglehetősen bőbeszédű. Sőt, az is nem hatékony, mint minden alkalommal, amikor be akarjuk szerezni a megfelelőt PizzaStatus, meg kell ismételnünk a PizzaStatus.values ​​().

2.1. Java 8 használata Folyam

Lássuk, hogyan találhatjuk meg a megfelelőt PizzaStatus a Java 8 megközelítést használva:

int timeToDeliveryForOrderedPizzaStatus = 5; Opcionális pizzaStatus = Arrays.stream (PizzaStatus.values ​​()) .filter (p -> p.getTimeToDelivery () == timeToDeliveryForOrderedPizzaStatus) .findFirst (); assertThat (pizzaStatus) .hasValue (PizzaStatus.ORDERED);

Ez a kód tömörebbnek tűnik, mint a kódot használó mert hurok. Azonban továbbra is iterálunk a PizzaStatus.values ​​() valahányszor megfelelő enumot kell kapnunk.

Azt is vegye figyelembe, hogy ebben a megközelítésben megkapjuk a Választható a helyett PizzaStatus közvetlenül.

3. Használata Térkép

Ezután használjuk a Java-kat Térkép adatstruktúra a értékek módszer az egész érték megadásának idejének megfelelő enum érték lekérésére.

Ebben a megközelítésben a értékek metódust csak egyszer hívják meg a térkép inicializálása közben. Továbbá, mivel térképet használunk, nem kell minden alkalommal ismétlnünk az értékeket, amikor be kell szereznünk a leadási időnek megfelelő enum értéket.

Statikus térképet használunk timeToDeliveryToEnumValuesMapping belsőleg, amely kezeli az idő feltérképezését a megfelelő enum érték elérése érdekében.

Továbbá a értékek módszere Enum osztály adja meg az összes enum értéket. Ban,-ben statikus blokkban iteráljuk az enum értékek tömbjét, és hozzáadjuk őket a térképhez, a megfelelő idővel együtt, hogy kulcs egész számot adjanak meg:

privát statikus térkép timeToDeliveryToEnumValuesMapping = new HashMap (); statikus {for (PizzaStatus pizzaStatus: PizzaStatus.values ​​()) {timeToDeliveryToEnumValuesMapping.put (pizzaStatus.getTimeToDelivery (), pizzaStatus); }}

Végül létrehozunk egy statikus módszer, amely a timeToDelivery egész szám paraméterként. Ez a módszer a megfelelő enum értéket adja vissza a statikus térkép segítségével timeToDeliveryToEnumValuesMapping:

public static PizzaStatus castIntToEnum (int timeToDelivery) {visszatérési időToDeliveryToEnumValuesMapping.get (timeToDelivery); }

Statikus térkép és statikus módszer használatával lekérjük az egész érték megadásának idejéhez tartozó enum értéket.

4. Következtetés

Összegzésként megnéztünk pár megoldást az egész értéknek megfelelő enum értékek lekérésére.

Mint mindig, ezek a kódminták elérhetők a GitHubon.