Bestem, om et objekt er af primitiv type

1. Oversigt

Nogle gange er vi nødt til at afgøre, om et objekt er af primitiv type, især for primitive typer af indpakning. Der er dog ingen indbyggede metoder i standard JDK for at opnå dette.

I denne hurtige vejledning ser vi, hvordan du implementerer en løsning ved hjælp af Java-kernen. Derefter ser vi på, hvordan vi kan opnå dette ved hjælp af et par almindeligt anvendte biblioteker.

2. Primitiver og indpakningsklasser

Der er ni foruddefinerede objekter, der repræsenterer otte primitiver og a ugyldig skriv Java. Hver primitiv type har en tilsvarende indpakningsklasse.

For at lære mere om Primitiver og Objekts, se denne artikel.

Det java.lang.Klasse.isPrimitive () metode kan bestemme, om det angivne objekt repræsenterer en primitiv type. Det fungerer dog ikke på indpakningerne til primitiver.

For eksempel returnerer følgende udsagn falsk:

Integer.class.isPrimitive (); 

Lad os nu se på forskellige måder, vi kan opnå dette på.

3. Brug af Core Java

Lad os først definere en HashMap variabel, der gemmer indpakningen og de primitive typeklasser:

privat statisk endelig kort WRAPPER_TYPE_MAP; statisk {WRAPPER_TYPE_MAP = nyt HashMap(16); WRAPPER_TYPE_MAP.put (heltal.klasse, int.klasse); WRAPPER_TYPE_MAP.put (Byte.klasse, byte.klasse); WRAPPER_TYPE_MAP.put (Character.class, char.class); WRAPPER_TYPE_MAP.put (boolsk.klasse, boolsk.klasse); 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 (ugyldig.klasse, ugyldig.klasse); }

Hvis objektet er en primitiv indpakningsklasse, kan vi slå det op fra det foruddefinerede HashMap variabel med java.utils.Map.ContainsKey () metode.

Nu kan vi oprette en simpel hjælpemetode til at bestemme, om objektkilden er af en primitiv type:

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

Lad os validere, at dette fungerer som forventet:

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

4. Brug af Apache Commons - ClassUtils.isPrimitiveOrWrapper ()

Apache Commons Lang har en ClassUtils.erPrimitiveOrWrapper metode, der kan bruges til at bestemme, om en klasse er en primitiv eller en indpakning af primitiv.

Lad os først tilføje commons-lang3 afhængighed fra Maven Central til vores pom.xml:

 org.apache.commons commons-lang3 3.5 

Lad os så teste det:

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

5. Brug af Guava - Primitiver.isWrapperType ()

Guava giver en lignende implementering via Primitives.isWrapperType metode.

Lad os igen tilføje afhængigheden fra Maven Central først:

 com.google.guava guava 29.0-jre 

På samme måde kan vi teste det ved hjælp af:

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

Men den Primitives.isWrapperType metoden fungerer ikke på den primitive klasse, følgende kode returnerer falsk:

assertFalse (Primitives.isWrapperType (boolsk.klasse));

6. Konklusion

I denne vejledning illustrerede vi, hvordan man bestemmer, om et objekt kan repræsentere en primitiv datatype ved hjælp af vores egen implementering ved hjælp af Java. Så kiggede vi på et par populære biblioteker, der giver hjælpemetoder til at opnå dette.

Den komplette kode kan findes på Github.


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