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.

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)

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.


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.


0

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

assert Date.isCase(new Date())

-20

somObject instanceof Date

sollte sein

somObject instanceOf Date


11
Das ist nicht richtig. instanceofsollte alles in Kleinbuchstaben sein.
Cdeszaq
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.