Wie verwende ich getClass (), um festzustellen, ob ein Objekt numerisch ist?

7

Ich möchte dynamisch angeben, ob ein Objekt in Java numerisch ist oder nicht. Mein Code ist wie folgt:

%Vor%

Die Object obj können beliebige numerische Typen wie Integer, Float, Double usw. sein. Aber wenn ich es mit Integer/Float/Double getestet habe, gibt attributeTypeStr immer "Non-Numeric" zurück. Ich denke, das liegt daran, dass Integer/Float/Double Unterklassen von Number sind, aber Number.class nicht gleich Double.class . Ich könnte etwas wie

verwenden %Vor%

Aber es sieht zu ausführlich aus. Gibt es einen einfachen Weg, das zu tun?

    
tonga 12.09.2013, 20:02
quelle

4 Antworten

14

Verwenden Sie instanceof :

%Vor%     
Óscar López 12.09.2013, 20:05
quelle
7

Verwenden Sie Class#isAssignableFrom(Class) welche besagt

  

Bestimmt, ob die Klasse oder Schnittstelle von diesem Klassenobjekt repräsentiert wird   ist entweder das gleiche wie oder ist eine Superklasse oder Superschnittstelle von der   Klasse oder Schnittstelle, die durch den angegebenen Class-Parameter dargestellt wird.

Machen

%Vor%

druckt daher true .

Es ist vielleicht nicht relevant für Ihre Frage, aber nur fyi:

Sotirios Delimanolis 12.09.2013 20:03
quelle
1

Verwenden Sie isInstance() Methode von Class

%Vor%

Nach Klasse # isInstance ()

  

Bestimmt, ob das angegebene Objekt zu dem von dieser Klasse dargestellten Objekt zuweisungskompatibel ist. Diese Methode ist das dynamische Äquivalent der Java-Sprache instanceof operator. Die Methode gibt true zurück, wenn das angegebene Object-Argument nicht null ist und in den von diesem Klassenobjekt dargestellten Referenztyp umgewandelt werden kann, ohne dass eine ClassCastException ausgelöst wird. Andernfalls wird false zurückgegeben.

    
Prabhaker 12.09.2013 20:10
quelle
1

Überprüfen Sie seine Oberklasse. Dies funktioniert, da diese Klassen direkte Superklassen sind:

%Vor%

Oder für nicht-direkte, überprüfen Sie Number.class.isAssignableFrom(obj.getClass()) . Für numerische Werte sollte dies kein großes Problem darstellen, da die vorhandenen Number-Unterklassen final sind. In der Genetik kann dies aufgrund fehlender Typinformation abbrechen.

    
hexafraction 12.09.2013 20:04
quelle

Tags und Links