blob: 98b642efbb130cc74f9c8bdbb7bb67f5fbefed7d [file] [log] [blame]
1 Groovy Beans
GroovyBeans are JavaBeans but using a much simpler syntax.
Here's an example
{code:gsh}
import java.util.Date
class Customer {
// properties
Integer id
String name
Date dob
// sample code
static void main(args) {
customer = new Customer(id:1, name:"Gromit", dob:new Date())
println("Hello ${customer.name}")
}
}
{code}
{code:output}
Hello Gromit
{code}
Notice how the properties look just like public fields. You can also set
named properties in a bean constructor in Groovy. In Groovy fields and properties
have been merged so that they act and look the same. So the above is equivlent to the
following Java code...
{code:java}
import java.util.Date;
public class Customer {
// properties
private Integer id;
private String name;
private Date dob;
public Integer getId() {
return id;
}
public Integer getId() {
return id;
}
public Integer getId() {
return id;
}
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");
println("Hello " + customer.getName());
}
}
{code}
1.1 Property and field rules
When Groovy is compiled to bytecode the following rules are used.
- if the property is private, then a Java field is used to represent the property
- if a public or protected property is declared (properties are public by default) then a public or protected getter and setter are created along with a private Java field
- if you don't declare any getters or setters they are automatically created for you at the bytecode level for public or protected properties.
- if you create a public or protected property you can overload any auto-created methods
So for example you could create a public read only property with a protected setter
or a read only property like this
{code:gsh}
class Foo {
// read only property
private String name
public String getName() { return name }
// read only property with protected setter
Integer amount
protected void setAmount(Integer amount) { this.amount = amount }
// dynamically typed property
cheese
}
{code}