Bruker Lombok’s @Accessors Annotation

1. Oversikt

Det er ganske typisk å ha og sett metoder i domenenes objekter, men det er andre måter vi kan finne mer uttrykksfulle på.

I denne veiledningen lærer vi om Project Lomboks @Accessors kommentar og dens støtte for flytende, lenket og tilpassede tilbehør.

Før du fortsetter, vil imidlertid IDE trenge Lombok installert.

2. Standard tilbehør

Før vi ser på @Accessors kommentar, la oss se på hvordan Lombok behandler @Getter og @Setter merknader som standard.

La oss først lage klassen vår:

@Getter @Setter offentlig klasse StandardAccount {privat strengnavn; privat BigDecimal balanse; }

Og la oss nå lage en prøvesak. Vi kan se i testen vår at Lombok har lagt til typiske getter- og settermetoder:

@Test offentlig ugyldig givenStandardAccount_thenUseStandardAccessors () {StandardAccount account = new StandardAccount (); account.setName ("Basic Accessors"); account.setBalance (BigDecimal.TEN); assertEquals ("Basic Accessors", account.getName ()); assertEquals (BigDecimal.TEN, account.getBalance ()); }

Vi får se hvordan denne testsaken endres når vi ser på @Accessor‘S alternativer.

3. Flytende tilbehør

La oss begynne med flytende alternativ:

@Accessors (flytende = sant)

De flytende alternativet gir oss tilgangere som ikke har en eller sett prefiks.

Vi tar en titt på kjede alternativet et øyeblikk, men siden det er aktivert som standard, la oss deaktivere det eksplisitt for nå:

@Accessors (fluent = true, chain = false) @Getter @Setter public class FluentAccount {private String name; privat BigDecimal balanse; }

Nå oppfører testen vår seg fortsatt den samme, men vi har endret måten vi får tilgang til og muterer tilstand:

@Test offentlig ugyldig givenFluentAccount_thenUseFluentAccessors () {FluentAccount account = new FluentAccount (); account.name ("flytende konto"); konto.balanse (BigDecimal.TEN); assertEquals ("Flytende konto", konto.navn ()); assertEquals (BigDecimal.TEN, account.balance ()); }

Legg merke til hvordan få og sett prefikser har forsvunnet.

4. Lenket tilbehør

La oss nå ta en titt på kjede alternativ:

@Accessors (chain = true)

De kjede alternativet gir oss settere som kommer tilbake dette. Vær igjen oppmerksom på at det som standard er ekte, men vi setter det eksplisitt for klarhet.

Dette betyr at vi kan kjede flere sett operasjoner sammen i en uttalelse.

La oss bygge videre på vår flytende tilbehør og endre kjede alternativ til ekte:

@Accessors (fluent = true, chain = true) @Getter @Setter public class ChainedFluentAccount {private String name; privat BigDecimal balanse; } 

Vi får den samme effekten hvis vi utelater kjede og bare spesifiser:

@Accessors (flytende = sant)

Og la oss nå se hvordan dette påvirker testsaken vår:

@Test offentlig ugyldig givenChainedFluentAccount_thenUseChainedFluentAccessors () {ChainedFluentAccount account = new ChainedFluentAccount () .name ("Fluent Account") .balance (BigDecimal.TEN); assertEquals ("Flytende konto", konto.navn ()); assertEquals (BigDecimal.TEN, account.balance ()); }

Legg merke til hvordan ny uttalelse blir lengre med settere lenket sammen, og fjernet noe kokeplate.

Dette er selvfølgelig Lomboks @Bygger bruker kjedered flytende tilbehør.

5. Prefiks tilbehør

Og til slutt, til tider kan feltene våre ha en annen navnekonvensjon enn vi ønsker å eksponere via getters og setters.

La oss vurdere følgende klasse som bruker ungarsk notasjon for sine felt:

offentlig klasse PrefixedAccount {private String sName; privat BigDecimal bdBalance; }

Hvis vi skulle avsløre dette med @Getter og @Setter, vi ville få metoder som getSName, som ikke er like lesbar.

De prefiks alternativet lar oss fortelle Lombok hvilke prefikser vi skal ignorere:

@Accessors (prefix = {"s", "bd"}) @Getter @Setter public class PrefixedAccount {private String sName; privat BigDecimal bdBalance; }

Så la oss se hvordan det påvirker testsaken vår:

@Test offentlig ugyldig givenPrefixedAccount_thenRemovePrefixFromAccessors () {PrefixedAccount account = new PrefixedAccount (); account.setName ("Forhåndsinnstilte felt"); account.setBalance (BigDecimal.TEN); assertEquals ("Prefixed Fields", account.getName ()); assertEquals (BigDecimal.TEN, account.getBalance ()); }

Legg merke til hvordan aksessorer for våre navn felt (settnavn,getName) utelat ledende s og tilbehør for bdBalance utelat ledelsen bd.

Imidlertid Lombok gjelder bare prefikser når et prefiks etterfølges av noe annet enn små bokstaver.

Dette sørger for at hvis vi har et felt som ikke bruker ungarsk notasjon, for eksempel stat, men starter med et av prefikset vårt, s, ender vi ikke med getTate ()!

Til slutt, la oss si at vi vil bruke understrekninger i notasjonen vår, men også ønsker å følge den med små bokstaver.

La oss legge til et felt s_noter med prefiks s_:

@Accessors (prefix = "s_") private streng s_noter;

Etter små bokstaven regelen ville vi få metoder som getS_Notes (), så Lombok bruker også prefikser når et prefiks ender i noe som ikke er en bokstav.

6. Konfigurasjonsegenskaper

Vi kan angi en prosjekt- eller katalogomfattende standard for vår favorittkombinasjon av innstillinger ved å legge til konfigurasjonsegenskaper til a lombok.config fil:

lombok.accessors.chain = ekte lombok.accessors.fluent = sant

Se konfigurasjonsveiledningen for Lombok-funksjonen for mer informasjon.

7. Konklusjon

I denne artikkelen brukte vi flytende, kjede, og prefiks valg av Lombok's @Accessors kommentar i forskjellige kombinasjoner for å se hvordan det påvirket den genererte koden.

For å lære mer, må du ta en titt på Lombok Accessors JavaDoc og eksperimentell funksjonsguide.

Som vanlig er kilden til denne artikkelen tilgjengelig på GitHub.