Používanie anotácie spoločnosti Lombok @Accessors

1. Prehľad

Je to dosť typické mať dostať a nastaviť metódy v našich doménových objektoch, ale existujú aj ďalšie spôsoby, ktoré by sme mohli považovať za expresívnejšie.

V tomto výučbe sa dozvieme niečo o projekte Lombok @Prístupcovia anotácia a jej podpora pre plynulých, pripútaných a vlastných prístupových práv.

Predtým, ako budete pokračovať, bude potrebné, aby náš IDE mal nainštalovaný Lombok.

2. Štandardné príslušenstvo

Skôr ako sa pozrieme na @Prístupcovia anotácia, Poďme sa pozrieť, ako Lombok zaobchádza s @Získajte a @Setter anotácie predvolene.

Najprv si vytvorme našu triedu:

@Getter @Setter verejná trieda StandardAccount {súkromný názov reťazca; súkromný zostatok BigDecimal; }

A teraz vytvorme testovací prípad. V našom teste vidíme, že Lombok pridal typické metódy getra a setra:

@ Test public void givenStandardAccount_thenUseStandardAccessors () {účet StandardAccount = nový účet StandardAccount (); account.setName ("Basic Accessors"); account.setBalance (BigDecimal.TEN); assertEquals ("Základné prístupové osoby", account.getName ()); assertEquals (BigDecimal.TEN, account.getBalance ()); }

Uvidíme, ako sa tento testovací prípad zmení, keď sa pozrieme na @AccessorMožnosti.

3. Plynulý prístup

Začnime s plynulo možnosť:

@Accessors (plynule = pravda)

The plynulo Táto možnosť nám dáva prístupové práva, ktoré nemajú dostať alebo nastaviť predpona.

Pozrime sa na reťaz o chvíľu, ale keďže je predvolene povolená, zakážme ju zatiaľ explicitne:

@Accessors (fluent = true, chain = false) @Getter @Setter public class FluentAccount {private String name; súkromný zostatok BigDecimal; }

Náš test sa teraz chová rovnako, zmenili sme však spôsob prístupu a mutácie stavu:

@ Test public void givenFluentAccount_thenUseFluentAccessors () {účet FluentAccount = nový účet FluentAccount (); account.name ("Fluent Account"); zostatok na ucte (BigDecimal.TEN); assertEquals ("Plynulý účet", account.name ()); assertEquals (BigDecimal.TEN, account.balance ()); }

Všimnite si, ako dostať a nastaviť predpony zmizli.

4. Chained Accessors

Teraz sa pozrime na reťaz možnosť:

@Accessors (chain = true)

The reťaz Táto možnosť nám dáva nastavovače, ktoré sa vracajú toto. Opäť upozorňujeme, že je predvolene nastavený na pravda, ale nastavíme to výslovne kvôli jasnosti.

To znamená, že môžeme reťaziť viac nastaviť operácie spolu v jednom výkaze.

Stavajme na našom plynulo prístupových práv a zmeniť reťaz možnosť pravda:

@Accessors (fluent = true, chain = true) @Getter @Setter public class ChainedFluentAccount {private String name; súkromný zostatok BigDecimal; } 

Rovnaký efekt získame, ak vynecháme reťaz a stačí zadať:

@Accessors (plynule = pravda)

A teraz sa pozrime, ako to ovplyvní náš testovací prípad:

@Test public void givenChainedFluentAccount_thenUseChainedFluentAccessors () {ChainedFluentAccount account = new ChainedFluentAccount () .name ("Fluent Account") .balance (BigDecimal.TEN); assertEquals ("Plynulý účet", account.name ()); assertEquals (BigDecimal.TEN, account.balance ()); }

Všimnite si, ako Nový vyhlásenie sa predlžuje s stavače pripútaný reťazami a odstrániť nejaký kotol.

Takto samozrejme Lombok je @Builder využíva reťazvyd plynulo pristupujúcich osôb.

5. Prefix Accessors

A nakoniec niekedy môže mať naše pole inú konvenciu pomenovania, ako by sme chceli vystaviť prostredníctvom getrov a setterov.

Uvažujme o nasledujúcej triede, ktorá pre svoje polia používa maďarskú notáciu:

verejná trieda PrefixedAccount {súkromný reťazec sName; súkromný BigDecimal bdBalance; }

Keby sme to mali odhaliť s @Získajte a @Setter, dostali by sme metódy ako getSName, čo nie je také čitateľné.

The predpona Táto možnosť nám umožňuje povedať Lomboku, ktoré predpony ignorovať:

@Accessors (prefix = {"s", "bd"}) @Getter @Setter verejná trieda PrefixedAccount {súkromný reťazec sName; súkromný BigDecimal bdBalance; }

Pozrime sa teda, ako to ovplyvňuje náš testovací prípad:

@Test public void givenPrefixedAccount_thenRemovePrefixFromAccessors () {účet PrefixedAccount = nový PrefixedAccount (); account.setName ("Predponované polia"); account.setBalance (BigDecimal.TEN); assertEquals ("Predponované polia", account.getName ()); assertEquals (BigDecimal.TEN, account.getBalance ()); }

Všimnite si, ako pristupujú naši sName lúka (setName,getName) vynechajte vedúceho s a prístupových práv pre bdBalance vynechať vedúceho bd.

Avšak Lombok predponu použije iba vtedy, keď za predponou nasleduje niečo iné ako malé písmeno.

To zaisťuje, že ak máme pole, ktoré nepoužíva maďarskú notáciu, ako napr štát, ale začína jednou z našich predpon, s, nekončíme getTate ()!

Na záver povedzme, že chceme v našej notácii použiť podčiarknutie, ale chceme za ním postupovať aj malým písmenom.

Pridajme pole s_notes s predponou s_:

@Accessors (prefix = "s_") private String s_notes;

Podľa pravidla pre malé písmená by sme dostali podobné metódy getS_Notes (), tak Lombok tiež použije predvoľby, keď predpona končí číslom, ktoré nie je písmenom.

6. Vlastnosti konfigurácie

Môžeme nastaviť predvolenú hodnotu projektu alebo adresára pre našu obľúbenú kombináciu nastavení pridaním konfiguračných vlastností do a lombok.config spis:

lombok.accessors.chain = true lombok.accessors.fluent = true

Ďalšie informácie nájdete v Sprievodcovi konfiguráciou funkcií Lombok.

7. Záver

V tomto článku sme použili plynulo, reťaz, a predpona možnosti Lomboku @Prístupcovia anotáciu v rôznych kombináciách, aby ste zistili, ako to ovplyvnilo vygenerovaný kód.

Ak sa chcete dozvedieť viac, nezabudnite si prečítať Sprievodcu JavaDoc a experimentálnymi funkciami produktu Lombok Accessors.

Zdroj tohto článku je ako obvykle k dispozícii na GitHub.