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
Aber es sieht zu ausführlich aus. Gibt es einen einfachen Weg, das zu tun?
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:
Verwenden Sie isInstance()
Methode von Class
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.
Ü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.
Tags und Links java reflection