Utvrdite je li objekt primitivnog tipa

1. Pregled

Ponekad moramo utvrditi je li objekt primitivnog tipa, posebno za primitivne tipove omota. Međutim, u standardnom JDK nema ugrađenih metoda koje bi to postigle.

U ovom brzom vodiču vidjet ćemo kako implementirati rješenje pomoću jezgre Java. Zatim ćemo pogledati kako to možemo postići pomoću nekoliko najčešće korištenih knjižnica.

2. Razredi primitiva i omota

Postoji devet unaprijed definiranih objekata koji predstavljaju osam primitiva i a poništiti upišite na Javi. Svaki primitivni tip ima odgovarajuću klasu omotača.

Da biste saznali više o Primitivci i Objektmolimo pogledajte ovaj članak.

The java.lang.Clasa.isPrimitive () metoda može odrediti predstavlja li navedeni objekt primitivan tip. Međutim, ne djeluje na omotima za primitivce.

Na primjer, vraća se sljedeća izjava lažno:

Integer.class.isPrimitive (); 

Pogledajmo sada različite načine na koje to možemo postići.

3. Korištenje jezgre Java

Prvo, definirajmo a HashMap varijabla koja pohranjuje omot i primitivne klase tipa:

privatna statička konačna karta WRAPPER_TYPE_MAP; static {WRAPPER_TYPE_MAP = nova HashMap(16); WRAPPER_TYPE_MAP.put (Integer.class, int.class); WRAPPER_TYPE_MAP.put (bajt.klasa, bajt.klasa); 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 (kratki.razred, kratki.razred); WRAPPER_TYPE_MAP.put (void.class, void.class); }

Ako je objekt primitivna klasa omotača, možemo ga potražiti iz unaprijed definirane HashMap varijabla sa java.utils.Map.ContainsKey () metoda.

Sada možemo stvoriti jednostavnu uslužnu metodu kako bismo utvrdili je li izvorni objekt primitivnog tipa:

javna statička logička vrijednost jePrimitiveType (izvor objekta) {return WRAPPER_TYPE_MAP.containsKey (source.getClass ()); }

Potvrdimo da ovo funkcionira prema očekivanjima:

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

4. Korištenje Apache Commons - ClassUtils.isPrimitiveOrWrapper ()

Apache Commons Lang ima ClassUtils.isPrimitiveOrWrapper metoda koja se može koristiti za utvrđivanje je li klasa primitiv ili omot primitiva.

Prvo, dodajmo commons-lang3 ovisnost od Maven Central-a do našeg pom.xml:

 org.apache.commons commons-lang3 3.5 

Onda ga testirajmo:

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

5. Korištenje Guave - Primitivci.isWrapperType ()

Guava pruža sličnu provedbu putem Primitivci.isWrapperType metoda.

Opet, dodajmo prvo ovisnost iz Maven Central:

 com.google.guava guava 29,0-jre 

Isto tako, možemo ga testirati pomoću:

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

Međutim Primitivci.isWrapperType metoda neće raditi na primitivnoj klasi, sljedeći će kôd vratiti false:

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

6. Zaključak

U ovom uputstvu ilustrirali smo kako odrediti može li objekt predstavljati primitivni tip podataka pomoću naše vlastite implementacije pomoću Jave. Zatim smo pogledali nekoliko popularnih knjižnica koje nude korisne metode za postizanje toga.

Kompletni kod možete pronaći na Githubu.


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