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.