Sådan bestemmes datatypen i Groovy

1. Introduktion

I denne hurtige vejledning skal vi udforske forskellige måder at finde datatypen i Groovy på.

Faktisk er det anderledes afhængigt af hvad vi laver:

  • Først ser vi på, hvad vi skal gøre for primitiver
  • Derefter ser vi, hvordan samlinger bringer nogle unikke udfordringer
  • Og endelig vil vi se på objekter og klassevariabler

2. Primitive typer

Groovy understøtter det samme antal primitive typer som Java. Vi kan finde datatypen af ​​primitiver på tre måder.

Lad os begynde med at forestille os, at vi har flere repræsentationer af en persons alder.

Lad os først starte med forekomst af operatør:

@Test offentlig ugyldighed givenWhenParameterTypeIsInteger_thenReturnTrue () {Person personObj = ny person (10) Assert.assertTrue (personObj.ageAsInt instans af heltal); }

forekomst af er en binær operatør, som vi kan bruge til at kontrollere, om et objekt er en forekomst af en given type. Det vender tilbage rigtigt hvis objektet er en forekomst af den bestemte type og falsk Ellers.

Også, Groovy 3 tilføjer det nye !forekomst af operatør. Det vender tilbage rigtigt hvis objektet ikke er en forekomst af en type og falsk Ellers.

Derefter kan vi også bruge getClass () metode fra objektklassen. Det returnerer runtime-klassen for en forekomst:

@Test offentlig ugyldighed givenWhenParameterTypeIsDouble_thenReturnTrue () {Person personObj = ny person (10.0) Assert.assertTrue ((personObj.ageAsDouble) .getClass () == Dobbelt)}

Endelig, lad os anvende.klasse operatør for at finde datatypen:

@Test offentlig ugyldighed givenWhenParameterTypeIsString_thenReturnTrue () {Person personObj = ny person ("10 år") Assert.assertTrue (personObj.ageAsString.class == String)}

På samme måde kan vi finde datatypen af ​​enhver primitiv type.

3. Samlinger

Groovy yder support til forskellige samlingstyper.

Lad os definere en simpel liste i Groovy:

@Test offentlig ugyldighed givenGroovyList_WhenFindClassName_thenReturnTrue () {def ageList = ['ageAsString', 'ageAsDouble', 10] Assert.assertTrue (ageList.class == ArrayList) Assert.assertTrue (ageList.getClassL) ()

Men på kort, den .klasse operatør kan ikke anvendes:

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

I ovenstående kodestykke ageMap.class vil forsøge at hente værdien af ​​nøgleklassen fra det givne kort. For kort anbefales det at anvende getClass ()end .klasse.

4. Objekter og klassevariabler

I ovenstående afsnit brugte vi forskellige strategier til at finde datatypen for primitiver og samlinger.

Lad os antage, at vi har en klasse for at se, hvordan klassevariabler fungerer Person:

@Test offentlig ugyldighed givenClassName_WhenParameterIsInteger_thenReturnTrue () {Assert.assertTrue (Person.class.getDeclaredField ('ageAsInt'). Type == int.class)}

Husk, at getDeclaredField () returnerer alle felterne i en bestemt klasse.

Vi kan finde typen af ​​ethvert objekt, der bruger instanceof, getClass () og .klasse operatører:

@Test offentlig ugyldighed givetWhenObjectIsInstanceOfType_thenReturnTrue () {Person personObj = ny person () Assert.assertTrue (personObj instans af person)}

Desuden kan vi også bruge Groovy-medlemsoperatøren i:

@Test offentlig ugyldighed givenWhenInstanceIsOfSubtype_thenReturnTrue () {Student studentObj = ny studerende () Assert.assertTrue (studentObj personligt)}

5. Konklusion

I denne korte artikel så vi, hvordan man finder datatypen i Groovy. Til sammenligning er getClass () metoden er sikrere end .klasse operatør. Vi diskuterede også arbejdet med i operatør sammen med forekomst af operatør. Derudover lærte vi at få alle felterne i en klasse og anvende .type operatør.

Som altid kan alle kodestykker findes på GitHub.