Groovy / Grails wie man einen Datentyp bestimmt?

175

Was ist der beste Weg, um den Datentyp in Groovy zu bestimmen?

Ich möchte die Ausgabe anders formatieren, wenn es sich um ein Datum usw. handelt.

Jack BeNimble
quelle

Antworten:

243

Um die Klasse eines Objekts zu bestimmen, rufen Sie einfach auf:

someObject.getClass()

Sie können dies someObject.classin den meisten Fällen abkürzen . Wenn Sie dies jedoch für a verwenden Map, wird versucht, den Wert mit dem Schlüssel 'class' abzurufen. Aus diesem Grund benutze ich immer getClass(), obwohl es etwas länger ist.

Wenn Sie überprüfen möchten, ob ein Objekt eine bestimmte Schnittstelle implementiert oder eine bestimmte Klasse (z. B. Datum) erweitert, verwenden Sie:

(somObject instanceof Date)

oder um zu überprüfen, ob die Klasse eines Objekts genau eine bestimmte Klasse ist (keine Unterklasse davon), verwenden Sie:

(somObject.getClass() == Date)
Dónal
quelle
2
instanceofeignet sich hervorragend zum Filtern basierend auf der Schnittstelle.
Cdeszaq
Zumindest im neuesten Groovy (2.3.7) können wir auch someObject.class
loloof64
5
@LaurentBERNABE, die in den meisten Fällen funktioniert, aber nicht in allen, zB eine MapInstanz
Dónal
Sie haben Recht: In diesem Fall erhalten wir null. Entschuldigung für den Fehler.
Loloof64
Was ist das dann? def test = {} println test.getClass() Klasse Script1 $ _run_closure1 ??
Petrunov
33

Einfache, gute Möglichkeit, den Objekttyp zu überprüfen:

somObject in Date

Kann auch auf Schnittstellen angewendet werden.

Michal Z Muda
quelle
3

Um Dónals Antwort um eine weitere Option zu erweitern, können Sie auch weiterhin die gute alte java.lang.Object.getClass()Methode verwenden.

Pops
quelle
0

Sie können den Membership Operator isCase () verwenden, was eine weitere gute Möglichkeit ist:

assert Date.isCase(new Date())
Ibrahim.H
quelle
-20

somObject instanceof Date

sollte sein

somObject instanceOf Date

Mike N.
quelle
11
Das ist nicht richtig. instanceofsollte alles in Kleinbuchstaben sein.
Cdeszaq