Hoe het gegevenstype in Groovy te bepalen

1. Inleiding

In deze korte tutorial gaan we verschillende manieren verkennen om het gegevenstype in Groovy te vinden.

Het is eigenlijk anders, afhankelijk van wat we doen:

  • Eerst kijken we wat we voor primitieven kunnen doen
  • Vervolgens zullen we zien hoe collecties enkele unieke uitdagingen met zich meebrengen
  • En tot slot kijken we naar objecten en klassevariabelen

2. Primitieve typen

Groovy ondersteunt hetzelfde aantal primitieve typen als Java. We kunnen het datatype van primitieven op drie manieren vinden.

Laten we ons om te beginnen eens voorstellen dat we meerdere weergaven van iemands leeftijd hebben.

Laten we eerst beginnen met de instantie van operator:

@Test openbare ongeldig gegevenWhenParameterTypeIsInteger_thenReturnTrue () {Person personObj = nieuwe persoon (10) Assert.assertTrue (personObj.ageAsInt instanceof Integer); }

instantie van is een binaire operator die we kunnen gebruiken om te controleren of een object een instantie van een bepaald type is. Het keert terug waar als het object een instantie van dat specifieke type is en false anders.

Ook, Groovy 3 voegt het nieuwe toe ! instanceof operator. Het keert terug waar als het object geen exemplaar is van een type en false anders.

Dan kunnen we ook de getClass () methode uit de klasse Object. Het retourneert de runtime-klasse van een instantie:

@Test openbare ongeldig gegevenWhenParameterTypeIsDouble_thenReturnTrue () {Person personObj = nieuwe persoon (10.0) Assert.assertTrue ((personObj.ageAsDouble) .getClass () == Double)}

Laten we ten slotte het.klasse operator om het gegevenstype te vinden:

@Test openbare ongeldig gegevenWhenParameterTypeIsString_thenReturnTrue () {Person personObj = nieuwe persoon ("10 jaar") Assert.assertTrue (personObj.ageAsString.class == String)}

Evenzo kunnen we het gegevenstype van elk primitief type vinden.

3. Collecties

Groovy biedt ondersteuning voor verschillende soorten inzameling.

Laten we een eenvoudige lijst definiëren in Groovy:

@Test openbare ongeldig gegevenGroovyList_WhenFindClassName_thenReturnTrue () {def ageList = ['ageAsString', 'ageAsDouble', 10] Assert.assertTrue (ageList.class == ArrayList) Assert.assertTrue (ageList.getCraylass ()

Maar op kaarten is de .klasse operator kan niet worden toegepast:

@Test openbare ongeldig gegevenGrooyMap_WhenFindClassName_thenReturnTrue () {def ageMap = [ageAsString: '10 jaar ', ageAsDouble: 10.0] Assert.assertFalse (ageMap.class == LinkedHashMap)}

In het bovenstaande codefragment, ageMap.class zal proberen de waarde van de sleutelklasse op te halen uit de gegeven map. Voor kaarten wordt aanbevolen om toe te passen getClass ()dan .klasse.

4. Objecten en klassevariabelen

In de bovenstaande secties hebben we verschillende strategieën gebruikt om het gegevenstype van primitieven en verzamelingen te vinden.

Laten we aannemen dat we een klas hebben om te zien hoe klassevariabelen werken Persoon:

@Test openbare leegte gegevenClassName_WhenParameterIsInteger_thenReturnTrue () {Assert.assertTrue (Person.class.getDeclaredField ('ageAsInt'). Type == int.class)}

Onthoud dat de getDeclaredField () geeft alle velden van een bepaalde klasse terug.

We kunnen het type van elk object vinden met behulp van instanceof, getClass () en .klasse operators:

@Test openbare ongeldig gegevenWhenObjectIsInstanceOfType_thenReturnTrue () {Person personObj = nieuwe persoon () Assert.assertTrue (personObj instantie van persoon)}

Bovendien kunnen we ook gebruik maken van de Groovy-lidmaatschapsoperator in:

@Test openbare ongeldig gegevenWhenInstanceIsOfSubtype_thenReturnTrue () {Student studentObj = nieuwe student () Assert.assertTrue (studentObj in persoon)}

5. Conclusie

In dit korte artikel hebben we gezien hoe we het gegevenstype in Groovy kunnen vinden. Ter vergelijking: de getClass () methode is veiliger dan .klasse operator. We bespraken ook de werking van in operator samen met instantie van operator. Bovendien hebben we geleerd hoe we alle velden van een klas kunnen krijgen en de .type operator.

Zoals altijd zijn alle codefragmenten te vinden op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found