A Lombok @Accessors Annotation használata
1. Áttekintés
Nagyon jellemző, hogy van kap és készlet módszereket a domainobjektumainkban, de más módszereket is találhatunk kifejezőbbnek.
Ebben az oktatóanyagban megismerhetjük a Project Lombok feladatait @Accessors annotáció és támogatása a folyékony, láncolt és egyedi hozzáférők számára.
A folytatás előtt azonban az IDE-nek telepítenie kell a Lombokot.
2. Standard hozzáférők
Mielőtt megnéznénk a @Accessors kommentár, nézzük át, hogy a Lombok hogyan kezeli a @Getter és @Setter alapértelmezés szerint kommentárok.
Először hozzuk létre az osztályunkat:
@Getter @Setter nyilvános osztály StandardAccount {privát karakterlánc neve; privát BigDecimal egyenleg; }
Most hozzunk létre egy tesztesetet. Tesztünk során láthatjuk, hogy a Lombok tipikus getter és setter módszereket adott hozzá:
@Test public void givenStandardAccount_thenUseStandardAccessors () {StandardAccount account = new StandardAccount (); account.setName ("Basic Accessors"); account.setBalance (BigDecimal.TEN); assertEquals ("Basic Accessors", account.getName ()); assertEquals (BigDecimal.TEN, account.getBalance ()); }
Megnézzük, hogyan néz ki ez a teszteset @AccessorLehetőségei.
3. Folyékony hozzáférők
Kezdjük a folyékony választási lehetőség:
@Accessors (folyékonyan = igaz)
A folyékony opcióval olyan hozzáférőket kapunk, amelyek nem rendelkeznek a kap vagy készlet előtag.
Megnézzük a lánc opció egy pillanat alatt, de mivel alapértelmezés szerint engedélyezve van, egyelőre kifejezetten tiltsuk le:
@Accessors (fluent = true, chain = false) @Getter @Setter public class FluentAccount {private String name; privát BigDecimal egyenleg; }
Most a tesztünk továbbra is ugyanúgy viselkedik, de megváltoztattuk az állapot elérésének és az állapot mutációjának módját:
@Test public void givenFluentAccount_thenUseFluentAccessors () {FluentAccount account = new FluentAccount (); account.name ("Folyékony számla"); számla.egyenleg (BigDecimal.TEN); assertEquals ("Folyékony számla", account.name ()); assertEquals (BigDecimal.TEN, számla.egyensúly ()); }
Figyelje meg, hogy a kap és állítsa be az előtagok eltűntek.
4. Láncolt hozzáférők
Most vessünk egy pillantást a lánc választási lehetőség:
@Accessors (lánc = igaz)
A lánc opció lehetőséget ad számunkra a visszatérőknek ez. Ismét vegye figyelembe, hogy alapértelmezés szerint igaz, de az egyértelműség kedvéért kifejezetten meghatározzuk.
Ez azt jelenti, hogy többször is láncolhatunk készlet műveletek együtt egy nyilatkozatban.
Építsünk a mi folyékony hozzáférők és változtassa meg a lánc opció igaz:
@Accessors (fluent = true, chain = true) @Getter @Setter public class ChainedFluentAccount {private String name; privát BigDecimal egyenleg; }
Ugyanezt a hatást kapjuk, ha elhagyjuk lánc és csak adja meg:
@Accessors (folyékonyan = igaz)
Most nézzük meg, hogy ez hogyan befolyásolja a tesztesetünket:
@Test public void givenChainedFluentAccount_thenUseChainedFluentAccessors () {ChainedFluentAccount account = new ChainedFluentAccount () .name ("Fluent Account") .balance (BigDecimal.TEN); assertEquals ("Folyékony számla", account.name ()); assertEquals (BigDecimal.TEN, számla.egyensúly ()); }
Figyelje meg, hogy a új állítás hosszabb lesz a beállítók láncolva, eltávolítva néhány kazánt.
Természetesen így működik Lombok @Építész felhasználja láncszerk folyékony hozzáférők.
5. Prefix Accessors
És végül, időnként előfordulhat, hogy a mezőinknek más névadási szokásaik vannak, mint amilyet szereznénk a szerelők és a beállítók segítségével.
Vizsgáljuk meg a következő osztályt, amely a magyar jelölést használja a mezőihez:
public class PrefixedAccount {private String sName; privát BigDecimal bdBalance; }
Ha ezt lelepleznénk @Getter és @Setter, kapnánk olyan módszereket, mint getSName, ami nem annyira olvasható.
A előtag Az opció lehetővé teszi számunkra, hogy megmondjuk a Lomboknak, mely előtagokat hagyja figyelmen kívül:
@Accessors (előtag = {"s", "bd"}) @Getter @Setter nyilvános osztály PrefixedAccount {private String sName; privát BigDecimal bdBalance; }
Tehát nézzük meg, hogyan befolyásolja ez a tesztesetünket:
@Test public void givenPrefixedAccount_thenRemovePrefixFromAccessors () {PrefixedAccount account = new PrefixedAccount (); account.setName ("Előtag mezők"); account.setBalance (BigDecimal.TEN); assertEquals ("Előtag mezők", account.getName ()); assertEquals (BigDecimal.TEN, account.getBalance ()); }
Figyeljük meg, hogy a hozzáférők a mi sName terület (setName,getName) hagyja ki a vezetőt s és a hozzáférők a bdBalance hagyja ki a vezetést bd.
Lombok azonban csak akkor alkalmazza az előtagokat, ha az előtagot valami más követi, mint a kisbetűk.
Ez biztosítja, hogy ha van olyan mezőnk, amely nem használja a Magyar Jelölést, mint pl állapot, de az egyik előtagunkkal kezdődik, s, végül nem getTate ()!
Végül tegyük fel, hogy aláhúzásjeleket akarunk használni a jelölésünkben, de kisbetűvel is szeretnénk követni.
Adjunk hozzá egy mezőt s_jegyzetek előtaggal s_:
@Accessors (prefix = "s_") privát karakterlánc s_notes;
A kisbetűs szabály betartásával olyan módszereket kapunk, mint a getS_Notes (), így A Lombok akkor is alkalmazza az előtagokat, ha maga az előtag valami nem betűvel végződik.
6. Konfigurációs tulajdonságok
Beállíthatunk egy projekt- vagy könyvtárszintű alapértelmezést a kedvenc beállítás-kombinációnkhoz, ha a konfigurációs tulajdonságokat hozzáadjuk a-hoz lombok.config fájl:
lombok.accessors.chain = true lombok.accessors.fluent = true
További részletekért lásd a Lombok Feature konfigurációs útmutatóját.
7. Következtetés
Ebben a cikkben a folyékony, láncos, és előtag Lombok lehetőségei @Accessors annotáció különféle kombinációkban, hogy lássa, hogyan befolyásolta a létrehozott kódot.
Ha többet szeretne megtudni, feltétlenül nézze meg a Lombok Accessors JavaDoc és a Kísérleti szolgáltatások útmutatót.
Szokás szerint a cikk forrása elérhető a GitHubon.