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.