Bestimmen Sie, ob ein Objekt vom primitiven Typ ist

1. Übersicht

Manchmal müssen wir feststellen, ob ein Objekt vom primitiven Typ ist, insbesondere für primitive Wrapper-Typen. Es gibt jedoch keine integrierten Methoden im Standard-JDK, um dies zu erreichen.

In diesem kurzen Tutorial erfahren Sie, wie Sie eine Lösung mit Java-Kern implementieren. Dann schauen wir uns an, wie wir dies mit ein paar häufig verwendeten Bibliotheken erreichen können.

2. Grundelemente und Wrapper-Klassen

Es gibt neun vordefinierte Objekte, die acht Grundelemente und einen Leertyp in Java darstellen. Jeder primitive Typ hat eine entsprechende Wrapper-Klasse.

Weitere Informationen zu Grundelementen und Objekten finden Sie in diesem Artikel.

Die java.lang.Class . Die Methode isPrimitive () kann bestimmen, ob das angegebene Objekt einen primitiven Typ darstellt. Bei den Wrappern für Grundelemente funktioniert dies jedoch nicht.

Die folgende Anweisung gibt beispielsweise false zurück :

Integer.class.isPrimitive(); 

Schauen wir uns nun verschiedene Möglichkeiten an, wie wir dies erreichen können.

3. Verwenden von Core Java

Definieren wir zunächst eine HashMap- Variable, in der die Wrapper- und die primitiven Typklassen gespeichert sind:

private static final Map
    
      WRAPPER_TYPE_MAP; static { WRAPPER_TYPE_MAP = new 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); }
     
    

Wenn das Objekt eine primitive Wrapper-Klasse ist, können wir es anhand der vordefinierten HashMap- Variablen mit der Methode java.utils.Map.ContainsKey () nachschlagen .

Jetzt können wir eine einfache Dienstprogrammmethode erstellen, um festzustellen, ob die Objektquelle vom primitiven Typ ist:

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

Lassen Sie uns überprüfen, ob dies wie erwartet funktioniert:

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

4. Verwenden von Apache Commons - ClassUtils. isPrimitiveOrWrapper ()

Apache Commons Lang hat ein ClassUtils . isPrimitiveOrWrapper- Methode, mit der bestimmt werden kann, ob eine Klasse ein Grundelement oder ein Wrapper eines Grundelements ist .

Fügen wir zunächst die commons-lang3- Abhängigkeit von Maven Central zu unserer pom.xml hinzu :

 org.apache.commons commons-lang3 3.5 

Dann lass es uns testen:

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

5. Verwenden von Guava - Primitiven. isWrapperType ()

Guava bietet eine ähnliche Implementierung über die Primitives.isWrapperType- Methode.

Fügen wir noch einmal zuerst die Abhängigkeit von Maven Central hinzu:

 com.google.guava guava 29.0-jre 

Ebenso können wir es testen mit:

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

Die Primitives.isWrapperType- Methode funktioniert jedoch nicht für die primitive Klasse. Der folgende Code gibt false zurück:

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

6. Fazit

In diesem Tutorial haben wir gezeigt, wie Sie mithilfe unserer eigenen Implementierung mit Java feststellen können, ob ein Objekt einen primitiven Datentyp darstellen kann. Dann haben wir uns einige beliebte Bibliotheken angesehen, die nützliche Methoden bieten, um dies zu erreichen.

Den vollständigen Code finden Sie auf Github.