Come determinare il tipo di dati in Groovy

1. Introduzione

In questo breve tutorial, esploreremo diversi modi per trovare il tipo di dati in Groovy.

In realtà, è diverso a seconda di cosa stiamo facendo:

  • Per prima cosa, vedremo cosa fare per i primitivi
  • Quindi, vedremo come le collezioni comportano alcune sfide uniche
  • Infine, esamineremo gli oggetti e le variabili di classe

2. Tipi primitivi

Groovy supporta lo stesso numero di tipi primitivi di Java. Possiamo trovare il tipo di dati delle primitive in tre modi .

Per iniziare, immaginiamo di avere più rappresentazioni dell'età di una persona.

Prima di tutto, iniziamo con l' operatore instanceof :

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

instanceof è un operatore binario che possiamo usare per verificare se un oggetto è un'istanza di un dato tipo. Restituisce true se l'oggetto è un'istanza di quel particolare tipo e false in caso contrario.

Inoltre, Groovy 3 aggiunge il nuovo operatore ! Instanceof . Restituisce true se l'oggetto non è un'istanza di un tipo e false in caso contrario.

Quindi, possiamo anche usare il metodo getClass () dalla classe Object. Restituisce la classe runtime di un'istanza:

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

Infine, applichiamo il. operatore di classe per trovare il tipo di dati:

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

Allo stesso modo, possiamo trovare il tipo di dati di qualsiasi tipo primitivo.

3. Collezioni

Groovy fornisce supporto per vari tipi di raccolte.

Definiamo un semplice elenco in Groovy:

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

Ma sulle mappe, l' operatore .class non può essere applicato:

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

Nello snippet di codice sopra, ageMap.class proverà a recuperare il valore della classe chiave dalla mappa data . Per le mappe, si consiglia di applicare getClass () rispetto a .class .

4. Oggetti e variabili di classe

Nelle sezioni precedenti, abbiamo utilizzato varie strategie per trovare il tipo di dati di primitive e raccolte.

Per vedere come funzionano le variabili di classe, supponiamo di avere una classe Person :

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

Ricorda che getDeclaredField () restituisce tutti i campi di una certa classe.

Possiamo trovare il tipo di qualsiasi oggetto usando gli operatori instanceof, getClass () e .class :

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

Inoltre, possiamo anche utilizzare l'operatore di appartenenza a Groovy in :

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

5. conclusione

In questo breve articolo, abbiamo visto come trovare il tipo di dati in Groovy. In confronto, il metodo getClass () è più sicuro dell'operatore .class . Abbiamo anche discusso del funzionamento di in operator insieme a instanceof operator. Inoltre, abbiamo imparato come ottenere tutti i campi di una classe e applicare l' operatore .type .

Come sempre, tutti gli snippet di codice possono essere trovati su GitHub.