A Groovy programozási nyelv

Szabványos könyvtárak

Szabványos könyvtárak

Interfészek implementálása máshogyan, Groovyval

A GroovyBean-ek valójában java bean-ek azzal a különbséggel, hogy a szintaxisuk sokkal egyszerűbb.
A beanek olyan pojok amelyenkek mezőik és mezőkhöz rendelt setterek és getterekkel rendelkeznek.

class Customer { // properties Integer id String name Date dob // sample code static void main(args) { def customer = new Customer(id:1, name:"Gromit", dob:new Date()) println("Hello ${customer.name}") } }

A következő java kódnak felel meg:

import java.util.Date; public class Customer { // properties private Integer id; private String name; private Date dob; public Integer getId() { return this.id; } public String getName() { return this.name; } public Date getDob() { return this.dob; } public void setId(Integer id) { this.id = id; } public void setName(String name) { this.name = name; } public void setDob(Date dob) { this.dob = dob; } // sample code public static void main(String[] args) { Customer customer = new Customer(); customer.setId(1); customer.setName("Gromit"); customer.setDob(new Date()); System.out.println("Hello " + customer.getName()); } }

Az osztály mezői úgy néznek ki mintha publikusak lennének, de valójában a groovyban összevonodnak a mezők és a beállítások.
Groovy kódból (ugyan úgy ahogy java kódból) bytecode keletkezik. A következő szabályok alapján generálódnak le a mezők és beállítások.:

  • Ha a név láthatósági módosítóval hoztuk létre, akkor a mező legenerálódik.
  • Ha a név láthatósági módosító nélkül hoztuk létre, akkor a mező legenerálódik privateként és létrejönnek hozzá publikus getterek és setterek.
  • Ha a beállitások final-ként hoztuk létre akkor a mező is final és csak értékét lehet lekérdezni módosítani nem lehet.
  • Létre lehet hozni azonos névvel beállítást és mezőt. Ebben az esetben a beállitás a mezőt tudja használni.
  • Például lehetőségünk van arra, hogy létrehozunk egy final beallítást, aminek az értékét csak lekérni lehet egy protected setterel:

    class Foo { // read only property final String name = "John" // read only property with public getter and protected setter Integer amount protected void setAmount(Integer amount) { this.amount = amount } // dynamically typed property def cheese }
    De a groovyban nem minden esetben generálódik setter a mezőkhöz, ez azért van, mert olyan mezőhöz nincs szükségünk setterre amelyet nem tudunk modósítani.

    Az így létrehozott pojoknak a mezőit elláthatjuk háromféle groovy.beans annotáció típussal.

  • Bindable
  • ListenerList
  • Vetoable
  •