Určte, či je objekt primitívneho typu

1. Prehľad

Niekedy musíme zistiť, či je objekt primitívneho typu, najmä pre primitívne typy wrapperov. V štandardnom JDK však nie sú zabudované žiadne metódy, ako to dosiahnuť.

V tomto rýchlom výučbe sa dozvieme, ako implementovať riešenie pomocou jadra Java. Potom sa pozrieme na to, ako to dosiahneme pomocou niekoľkých bežne používaných knižníc.

2. Primitívne a obalové triedy

Existuje deväť preddefinovaných objektov, ktoré reprezentujú osem primitívov a neplatný zadajte v jazyku Java. Každý primitívny typ má zodpovedajúcu triedu obaľovača.

Ak sa chcete dozvedieť viac o Primitív a Objekts, pozrite si tento článok.

The java.lang.Class.isPrimitive () metóda môže určiť, či zadaný objekt predstavuje primitívny typ. Na obaly pre primitívov to však nefunguje.

Napríklad sa vráti nasledujúci príkaz nepravdivé:

Integer.class.isPrimitive (); 

Poďme sa teraz pozrieť na rôzne spôsoby, ako to môžeme dosiahnuť.

3. Používanie Core Java

Najskôr definujme a HashMap premenná, ktorá ukladá triedy wrapper a primitívne typy:

súkromná statická konečná mapa WRAPPER_TYPE_MAP; static {WRAPPER_TYPE_MAP = nová HashMap(16); WRAPPER_TYPE_MAP.put (Integer.class, int.class); WRAPPER_TYPE_MAP.put (Byte.class, byte.class); WRAPPER_TYPE_MAP.put (Character.class, char.class); WRAPPER_TYPE_MAP.put (Boolean.class, boolean.class); WRAPPER_TYPE_MAP.put (Double.class, double.class); WRAPPER_TYPE_MAP.put (Float.class, float.class); WRAPPER_TYPE_MAP.put (Long.class, long.class); WRAPPER_TYPE_MAP.put (Short.class, short.class); WRAPPER_TYPE_MAP.put (Void.class, void.class); }

Ak je objektom trieda primitívnych obalov, môžeme ho vyhľadať z preddefinovaných HashMap premenná s java.utils.Map.ContainsKey () metóda.

Teraz môžeme vytvoriť jednoduchú obslužnú metódu na určenie, či je zdroj objektu primitívneho typu:

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

Overme si, že to funguje podľa očakávania:

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

4. Používanie Apache Commons - ClassUtils.isPrimitiveOrWrapper ()

Apache Commons Lang má ClassUtils.isPrimitiveOrWrapper metóda, pomocou ktorej sa dá určiť, či je trieda primitív alebo obal primitívu.

Najskôr pridajme commons-lang3 závislosť od Maven Central k našej pom.xml:

 org.apache.commons commons-lang3 3.5 

Potom to otestujme:

assertTrue (ClassUtils.isPrimitiveOrWrapper (Boolean.False.getClass ())); assertTrue (ClassUtils.isPrimitiveOrWrapper (boolean.class)); assertFalse (ClassUtils.isPrimitiveOrWrapper (StringUtils.EMPTY.getClass ()));

5. Používanie Guavy - Primitív.isWrapperType ()

Guava poskytuje podobnú implementáciu prostredníctvom Primitives.isWrapperType metóda.

Opäť najskôr pridajme závislosť od Maven Central:

 com.google.guava guava 29.0-jre 

Rovnako to môžeme otestovať pomocou:

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

Avšak Primitives.isWrapperType metóda nebude fungovať na primitívnej triede, nasledujúci kód vráti false:

assertFalse (Primitives.isWrapperType (boolean.class));

6. Záver

V tomto tutoriáli sme ilustrovali, ako určiť, či môže objekt predstavovať primitívny údajový typ pomocou našej vlastnej implementácie pomocou Javy. Potom sme sa pozreli na niekoľko populárnych knižníc, ktoré poskytujú užitočné metódy na dosiahnutie tohto cieľa.

Celý kód nájdete na stránkach Github.


$config[zx-auto] not found$config[zx-overlay] not found