Groovy / Grails comment déterminer un type de données?

176

Quelle est la meilleure façon de déterminer le type de données dans groovy?

J'aimerais formater la sortie différemment s'il s'agit d'une date, etc.

Jack BeNimble
la source

Réponses:

244

Pour déterminer la classe d'un objet, appelez simplement:

someObject.getClass()

Vous pouvez abréger cela en someObject.classdans la plupart des cas. Cependant, si vous l'utilisez sur un, Mapil essaiera de récupérer la valeur avec la clé 'class'. Pour cette raison, j'utilise toujoursgetClass() même si c'est un peu plus long.

Si vous voulez vérifier si un objet implémente une interface particulière ou étend une classe particulière (par exemple Date), utilisez:

(somObject instanceof Date)

ou pour vérifier si la classe d'un objet est exactement une classe particulière (pas une sous-classe de celle-ci), utilisez:

(somObject.getClass() == Date)
Dónal
la source
2
instanceofest idéal pour le filtrage basé sur l'interface.
cdeszaq
Au moins dans le dernier Groovy (2.3.7), nous pouvons également écrire someObject.class
loloof64
5
@LaurentBERNABE qui fonctionne dans la plupart des cas, mais pas dans tous, par exemple une Mapinstance
Dónal
Vous avez raison: nous obtenons nul dans ce cas. S'excuser pour l'erreur.
loloof64
Alors qu'est-ce que c'est? def test = {} println test.getClass() classe Script1 $ _run_closure1 ??
Petrunov
33

Façon simple et groovy de vérifier le type d'objet:

somObject in Date

Peut être appliqué également aux interfaces.

Michal Z muda
la source
3

Juste pour ajouter une autre option à la réponse de Dónal, vous pouvez toujours utiliser la bonne vieille java.lang.Object.getClass()méthode.

Pops
la source
0

Vous pouvez utiliser l'opérateur d'appartenance isCase () qui est une autre façon groovy:

assert Date.isCase(new Date())
Ibrahim.H
la source
-20

somObject instanceof Date

devrait être

somObject instanceOf Date

Mike N
la source
11
Ce n'est pas correct. instanceofdevraient tous être en minuscules.
cdeszaq