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.

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)

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.


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.


0

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

assert Date.isCase(new Date())

-20

somObject instanceof Date

devrait être

somObject instanceOf Date


11
Ce n'est pas correct. instanceofdevraient tous être en minuscules.
cdeszaq
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.