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