Határozza meg, hogy egy objektum primitív típusú-e

1. Áttekintés

Néha meg kell határoznunk, hogy egy objektum primitív típusú-e, különösen a burkoló primitív típusok esetében. Ennek elérésére azonban a szabványos JDK-ban nincsenek beépített módszerek.

Ebben a gyors bemutatóban megtudhatjuk, hogyan lehet megoldást megvalósítani az alapvető Java használatával. Ezután megvizsgáljuk, hogyan érhetjük el ezt néhány gyakran használt könyvtár segítségével.

2. Primitívek és burkoló osztályok

Kilenc előre definiált objektum képviseli nyolc primitív és a üres írja be a Java-t. Minden primitív típusnak van egy megfelelő Wrapper osztálya.

További információkért Primitívek és Tárgys, kérjük, olvassa el ezt a cikket.

A java.lang.Osztály.isPrimitive () A módszer meghatározhatja, hogy a megadott objektum primitív típust képvisel-e. A primitívek burkolóin azonban nem működik.

Például a következő utasítás visszatér hamis:

Integer.class.isPrimitive (); 

Most vessünk egy pillantást ennek különböző módjaira.

3. A Core Java használata

Először definiáljuk a HashMap változó, amely a burkolót és a primitív típusú osztályokat tárolja:

privát statikus végleges térkép WRAPPER_TYPE_MAP; statikus {WRAPPER_TYPE_MAP = új HashMap(16); WRAPPER_TYPE_MAP.put (Integer.class, int.class); WRAPPER_TYPE_MAP.put (bájt.osztály, bájt.osztály); WRAPPER_TYPE_MAP.put (Character.class, char.class); WRAPPER_TYPE_MAP.put (logikai.osztály, logikai.osztály); WRAPPER_TYPE_MAP.put (dupla osztály, dupla osztály); WRAPPER_TYPE_MAP.put (Float.class, float.class); WRAPPER_TYPE_MAP.put (hosszú.osztály, hosszú.osztály); WRAPPER_TYPE_MAP.put (Rövid.osztály, Rövid.osztály); WRAPPER_TYPE_MAP.put (Void.class, void.class); }

Ha az objektum primitív burkolóosztály, akkor megkereshetjük az előre definiáltból HashMap változóval java.utils.Map.ContainsKey () módszer.

Most létrehozhatunk egy egyszerű segédprogram-módszert annak megállapítására, hogy az objektumforrás primitív-e:

public static boolean isPrimitiveType (Object source) {return WRAPPER_TYPE_MAP.containsKey (source.getClass ()); }

Ellenőrizzük, hogy ez a várt módon működik-e:

assertTrue (PrimitiveTypeUtil.isPrimitiveType (hamis)); assertTrue (PrimitiveTypeUtil.isPrimitiveType (1L)); assertFalse (PrimitiveTypeUtil.isPrimitiveType (StringUtils.EMPTY));

4. Az Apache Commons használata - ClassUtils.isPrimitiveOrWrapper ()

Az Apache Commons Lang egy ClassUtils.isPrimitiveOrWrapper módszer, amellyel meghatározható, hogy egy osztály primitív-e vagy primitív burkolója.

Először tegyük hozzá a commons-lang3 függőség a Maven Central-tól a miénkig pom.xml:

 org.apache.commons commons-lang3 3.5 

Akkor teszteljük:

assertTrue (ClassUtils.isPrimitiveOrWrapper (Boolean.False.getClass ())); assertTrue (ClassUtils.isPrimitiveOrWrapper (logikai.osztály)); assertFalse (ClassUtils.isPrimitiveOrWrapper (StringUtils.EMPTY.getClass ()));

5. Guava használata - Primitívek.isWrapperType ()

A Guava hasonló megvalósítást nyújt a Primitívek.isWrapperType módszer.

Ismét tegyük hozzá először a Maven Central függőségét:

 com.google.guava guava 29.0-jre 

Hasonlóképpen kipróbálhatjuk a következők használatával:

assertTrue (Primitives.isWrapperType (Boolean.FALSE.getClass ())); assertFalse (Primitives.isWrapperType (StringUtils.EMPTY.getClass ()));

Azonban a Primitívek.isWrapperType A metódus nem működik a primitív osztályon, a következő kód hamis értéket ad vissza:

assertFalse (Primitívek.isWrapperType (logikai.osztály));

6. Következtetés

Ebben az oktatóanyagban bemutattuk, hogyan lehet meghatározni, hogy egy objektum képes-e egy primitív adattípust reprezentálni a saját Java használatával. Ezután megnéztünk néhány népszerű könyvtárat, amelyek hasznos módszereket kínálnak ennek elérésére.

A teljes kód megtalálható a Github oldalon.