Comment déterminer le type de données dans Groovy

1. Introduction

Dans ce tutoriel rapide, nous allons explorer différentes manières de trouver le type de données dans Groovy.

En fait, c'est différent selon ce que nous faisons:

  • Tout d'abord, nous allons voir ce qu'il faut faire pour les primitives
  • Ensuite, nous verrons comment les collections présentent des défis uniques
  • Et enfin, nous examinerons les objets et les variables de classe

2. Types primitifs

Groovy prend en charge le même nombre de types primitifs que Java. Nous pouvons trouver le type de données des primitives de trois manières .

Pour commencer, imaginons que nous ayons plusieurs représentations de l'âge d'une personne.

Tout d'abord, commençons par l' opérateur instanceof :

@Test public void givenWhenParameterTypeIsInteger_thenReturnTrue() { Person personObj = new Person(10) Assert.assertTrue(personObj.ageAsInt instanceof Integer); }

instanceof est un opérateur binaire que nous pouvons utiliser pour vérifier si un objet est une instance d'un type donné. Il renvoie true si l'objet est une instance de ce type particulier et false dans le cas contraire.

De plus, Groovy 3 ajoute le nouvel opérateur ! Instanceof . Il renvoie true si l'objet n'est pas une instance d'un type et false dans le cas contraire.

Ensuite, nous pouvons également utiliser la méthode getClass () de la classe Object. Il renvoie la classe d'exécution d'une instance:

@Test public void givenWhenParameterTypeIsDouble_thenReturnTrue() { Person personObj = new Person(10.0) Assert.assertTrue((personObj.ageAsDouble).getClass() == Double) }

Enfin, appliquons le. opérateur de classe pour trouver le type de données:

@Test public void givenWhenParameterTypeIsString_thenReturnTrue() { Person personObj = new Person("10 years") Assert.assertTrue(personObj.ageAsString.class == String) }

De même, nous pouvons trouver le type de données de tout type primitif.

3. Collections

Groovy prend en charge divers types de collections.

Définissons une liste simple dans Groovy:

@Test public void givenGroovyList_WhenFindClassName_thenReturnTrue() { def ageList = ['ageAsString','ageAsDouble', 10] Assert.assertTrue(ageList.class == ArrayList) Assert.assertTrue(ageList.getClass() == ArrayList) }

Mais sur les cartes, l' opérateur .class ne peut pas être appliqué:

@Test public void givenGrooyMap_WhenFindClassName_thenReturnTrue() { def ageMap = [ageAsString: '10 years', ageAsDouble: 10.0] Assert.assertFalse(ageMap.class == LinkedHashMap) }

Dans l'extrait de code ci-dessus, ageMap.class essaiera de récupérer la valeur de la classe de clé de la carte donnée . Pour les cartes, il est recommandé d'appliquer getClass () plutôt que .class .

4. Objets et variables de classe

Dans les sections ci-dessus, nous avons utilisé diverses stratégies pour trouver le type de données des primitives et des collections.

Pour voir comment fonctionnent les variables de classe, supposons que nous ayons une classe Person :

@Test public void givenClassName_WhenParameterIsInteger_thenReturnTrue() { Assert.assertTrue(Person.class.getDeclaredField('ageAsInt').type == int.class) }

N'oubliez pas que getDeclaredField () renvoie tous les champs d'une certaine classe.

Nous pouvons trouver le type de n'importe quel objet en utilisant les opérateurs instanceof, getClass () et .class :

@Test public void givenWhenObjectIsInstanceOfType_thenReturnTrue() { Person personObj = new Person() Assert.assertTrue(personObj instanceof Person) }

De plus, nous pouvons également utiliser l'opérateur d'appartenance Groovy dans :

@Test public void givenWhenInstanceIsOfSubtype_thenReturnTrue() { Student studentObj = new Student() Assert.assertTrue(studentObj in Person) }

5. Conclusion

Dans ce court article, nous avons vu comment trouver le type de données dans Groovy. Par comparaison, la méthode getClass () est plus sûre que l' opérateur .class . Nous avons également discuté du fonctionnement de l' opérateur in avec l' opérateur instanceof . De plus, nous avons appris à récupérer tous les champs d'une classe et à appliquer l' opérateur .type .

Comme toujours, tous les extraits de code peuvent être trouvés sur GitHub.