Korištenje Lombokove @Accessors Annotation

1. Pregled

Prilično je tipično imati dobiti i postavljen metode u objektima naše domene, ali postoje i drugi načini koje bismo mogli smatrati izražajnijima.

U ovom uputstvu saznat ćemo o projektima Lombok @ Pristupnici napomena i podrška za tečne, lančane i prilagođene pristupe.

Prije nastavka, međutim, naš IDE trebat će instalirati Lombok.

2. Standardni pristupnici

Prije nego što pogledamo @ Pristupnici napomena, pogledajmo kako se Lombok odnosi prema @ Dobij i @Seter bilješke prema zadanim postavkama.

Prvo, kreirajmo svoj razred:

@Getter @Setter javna klasa StandardAccount {naziv privatnog niza; privatni BigDecimal saldo; }

A sada napravimo testni slučaj. U našem testu možemo vidjeti da je Lombok dodao tipične metode dobivanja i postavljanja:

@Test javna praznina givenStandardAccount_thenUseStandardAccessors () {StandardAccount račun = novi StandardAccount (); account.setName ("Osnovni pristupnici"); account.setBalance (BigDecimal.TEN); assertEquals ("Osnovni pristupnici", account.getName ()); assertEquals (BigDecimal.TEN, account.getBalance ()); }

Vidjet ćemo kako će se ovaj testni slučaj promijeniti dok gledamo @ PristupnikOpcije.

3. Tečni pristupnici

Počnimo s tečno opcija:

@ Pristupnici (tečno = točno)

The tečno opcija nam daje pristupnike koji nemaju dobiti ili postavljen prefiks.

Pogledat ćemo lanac opciju u trenutku, ali budući da je omogućena prema zadanim postavkama, onemogućimo je za sada izričito:

@Accessors (fluent = true, chain = false) @Getter @Setter javna klasa FluentAccount {naziv privatnog niza; privatni BigDecimal saldo; }

Naš se test i dalje ponaša isto, ali promijenili smo način pristupa i mutacije stanja:

@Test javna praznina givenFluentAccount_thenUseFluentAccessors () {FluentAccount account = new FluentAccount (); account.name ("Tečni račun"); account.balance (BigDecimal.TEN); assertEquals ("Tečni račun", account.name ()); assertEquals (BigDecimal.TEN, account.balance ()); }

Primijetite kako dobiti i postaviti prefiksi su nestali.

4. Lančani pristupnici

Sada pogledajmo lanac opcija:

@ Pristupnici (lanac = točno)

The lanac opcija daje nam postavljače koji se vraćaju ovaj. Opet imajte na umu da je to zadano pravi, ali to ćemo izričito postaviti zbog jasnosti.

To znači da možemo povezati višestruke lance postavljen operacije zajedno u jednoj izjavi.

Gradimo na našem tečno pristupnici i promijenite lanac mogućnost da pravi:

@Accessors (fluent = true, chain = true) @Getter @Setter javna klasa ChainedFluentAccount {naziv privatnog niza; privatni BigDecimal saldo; } 

Isti ćemo učinak dobiti ako izostavimo lanac i samo navedite:

@ Pristupnici (tečno = točno)

A sada da vidimo kako ovo utječe na naš testni slučaj:

@Test javna praznina givenChainedFluentAccount_thenUseChainedFluentAccessors () {ChainedFluentAccount account = new ChainedFluentAccount () .name ("Tekući račun") .balance (BigDecimal.TEN); assertEquals ("Tečni račun", account.name ()); assertEquals (BigDecimal.TEN, account.balance ()); }

Primijetite kako novi Izjava postaje dulja s postavljači okovani lancima, uklanjajući malo kotla.

Ovo je, naravno, Lombokovo @Graditelj koristi lanacizd tečno pristupnici.

5. Pristupnici prefiksa

I na kraju, ponekad naša polja mogu imati drugačiju konvenciju imenovanja od one koju bismo željeli izložiti putem getera i postavljača.

Razmotrimo sljedeću klasu koja za svoja polja koristi mađarski zapis:

javni razred PrefixedAccount {private String sName; privatni BigDecimal bdBalance; }

Kad bismo ovo razotkrili sa @ Dobij i @Seter, dobili bismo metode poput getSName, što nije baš toliko čitljivo.

The prefiks opcija omogućuje nam da Lomboku kažemo koje će prefikse zanemariti:

@Accessors (prefix = {"s", "bd"}) @Getter @Setter javna klasa PrefixedAccount {private String sName; privatni BigDecimal bdBalance; }

Pa, pogledajmo kako to utječe na naš testni slučaj:

@Test javna praznina givenPrefixedAccount_thenRemovePrefixFromAccessors () {PrefixedAccount account = new PrefixedAccount (); account.setName ("Prefiksirana polja"); account.setBalance (BigDecimal.TEN); assertEquals ("Prefiksirana polja", account.getName ()); assertEquals (BigDecimal.TEN, account.getBalance ()); }

Primijetite kako su pristupi za naš sIme polje (setName,getName) izostaviti vodeće s i pribor za bdBalance izostaviti vodeće bd.

Međutim, Lombok primjenjuje prefikse samo kada prefiksu slijedi nešto drugo osim malog slova.

To osigurava da ako imamo polje koje ne koristi mađarski zapis, kao što je država, ali započinje s jednim od naših prefiksa, s, ne završimo s getTate ()!

Na kraju, recimo da želimo koristiti podvlake u našem zapisu, ali također želimo da ih pratimo malim slovom.

Dodajmo polje s_notes s prefiksom s_:

@ Pristupnici (prefiks = "s_") privatni niz s_notes;

Slijedom pravila o malim slovima dobili bismo metode poput getS_Notes (), tako Lombok također primjenjuje prefikse kada i sam prefiks završava nečim što nije slovo.

6. Svojstva konfiguracije

Možemo postaviti zadane postavke za projekt ili direktorij za našu omiljenu kombinaciju postavki dodavanjem svojstava konfiguracije u lombok.config datoteka:

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

Dodatne pojedinosti potražite u Vodiču za konfiguraciju značajki Lombok.

7. Zaključak

U ovom smo članku koristili tečno, lanac, i prefiks opcije Lombokove @ Pristupnici napomena u raznim kombinacijama da se vidi kako je utjecala na generirani kôd.

Da biste saznali više, svakako pogledajte vodič JavaDoc i eksperimentalne značajke Lombok Accessors.

Kao i obično, izvor ovog članka dostupan je na GitHubu.