Brug af Lomboks @Accessors-kommentar

1. Oversigt

Det er ret typisk at have og sæt metoder i vores domæneobjekter, men der er andre måder, vi kan finde mere udtryksfulde på.

I denne vejledning lærer vi om Project Lomboks @Accessorer kommentar og dens understøttelse af flydende, kædede og tilpassede accessors.

Før vi fortsætter, skal vores IDE dog have Lombok installeret.

2. Standard tilbehør

Før vi ser på @Accessorer kommentar, lad os gennemgå, hvordan Lombok behandler @Getter og @Setter annoteringer som standard.

Lad os først oprette vores klasse:

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

Og lad os nu oprette en test sag. Vi kan i vores test se, at Lombok har tilføjet typiske getter- og settermetoder:

@Test offentlig ugyldighed 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 testsag ændrer sig, når vi ser på @Accessor'S muligheder.

3. Flydende tilbehør

Lad os begynde med flydende mulighed:

@Accessors (flydende = sandt)

Det flydende mulighed giver os accessorer, der ikke har en eller sæt præfiks.

Vi kigger på kæde mulighed på et øjeblik, men da den er aktiveret som standard, lad os deaktivere den eksplicit for nu:

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

Nu opfører vores test sig stadig det samme, men vi har ændret den måde, vi får adgang til og muterer tilstand:

@Test offentlig ugyldighed givenFluentAccount_thenUseFluentAccessors () {FluentAccount-konto = ny FluentAccount (); account.name ("Flydende konto"); konto.balance (BigDecimal.TEN); assertEquals ("Flydende konto", konto.navn ()); assertEquals (BigDecimal.TEN, account.balance ()); }

Læg mærke til, hvordan få og sæt præfikser er forsvundet.

4. Kædede tilbehør

Lad os nu se på kæde mulighed:

@Accessors (kæde = sand)

Det kæde mulighed giver os settere, der vender tilbage det her. Igen bemærk, at det som standard er rigtigt, men vi sætter det eksplicit for klarhedens skyld.

Dette betyder, at vi kan kæde flere sæt operationer sammen i en erklæring.

Lad os bygge videre på vores flydende accessors og skift kæde mulighed for at rigtigt:

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

Vi får den samme effekt, hvis vi udelader kæde og angiv bare:

@Accessors (flydende = sandt)

Og lad os nu se, hvordan dette påvirker vores testsag:

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

Læg mærke til, hvordan ny udsagn bliver længere med settere lænket sammen og fjernet noget kedelplade.

Sådan er det selvfølgelig Lomboks @Bygger gør brug af kædered flydende tilbehør.

5. Prefix-tilbehør

Og endelig kan vores felter til tider have en anden navngivningskonvention, end vi gerne vil udsætte via getters og settere.

Lad os overveje følgende klasse, der bruger ungarsk notation til sine felter:

public class PrefixedAccount {private String sName; privat BigDecimal bdBalance; }

Hvis vi skulle afsløre dette med @Getter og @Setter, ville vi få metoder som getSName, som ikke er så læsbar.

Det præfiks mulighed giver os mulighed for at fortælle Lombok, hvilke præfikser der skal ignoreres:

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

Så lad os se, hvordan det påvirker vores testsag:

@Test offentlig ugyldighed givenPrefixedAccount_thenRemovePrefixFromAccessors () {PrefixedAccount account = new PrefixedAccount (); account.setName ("Forudbestemte felter"); account.setBalance (BigDecimal.TEN); assertEquals ("Forudindstillede felter", account.getName ()); assertEquals (BigDecimal.TEN, account.getBalance ()); }

Læg mærke til, hvordan accessorerne til vores navn Mark (sætnavn,getName) udelad de førende s og tilbehør til bdBalance udelad føringen bd.

Dog Lombok gælder kun præfikser, når et præfiks efterfølges af noget andet end små bogstaver.

Dette sikrer, at hvis vi har et felt, der ikke bruger ungarsk notation, som f.eks stat, men starter med et af vores præfikser, s, ender vi ikke med getTate ()!

Lad os endelig sige, at vi vil bruge understregninger i vores notation, men også ønsker at følge det med små bogstaver.

Lad os tilføje et felt s_noter med præfiks s_:

@Accessors (præfiks = "s_") private streng s_noter;

Efter regel med små bogstaver ville vi få metoder som getS_Notes (), så Lombok anvender også præfikser, når et præfiks ender i noget, der ikke er et bogstav.

6. Konfigurationsegenskaber

Vi kan indstille en projekt- eller biblioteksstandard for vores foretrukne kombination af indstillinger ved at føje konfigurationsegenskaber til en lombok.config fil:

lombok.accessors.chain = sand lombok.accessors.fluent = sand

Se Lombok Feature Configuration Guide for yderligere detaljer.

7. Konklusion

I denne artikel brugte vi flydende, kæde, og præfiks muligheder for Lombok's @Accessorer kommentar i forskellige kombinationer for at se, hvordan det påvirkede den genererede kode.

For at lære mere skal du sørge for at se på Lombok Accessors JavaDoc og eksperimentel funktionsguide.

Som sædvanlig er kilden til denne artikel tilgængelig på GitHub.