Groovy Beans x Java Beans
Hey!
Ultimamente estou encima do meu TCC mais do que nunca. Está ficando cada vez mais complicado, mais complexo, mais robusto… (ai, faltou adjetivos aí..) O pior de tudo é que realmente ainda tem muita coisa pra ser feita. o.O
Mesmo assim voltei a dar uma lidinha sobre a linguagem Groovy e achei interessante a forma com que
ela trata os beans. Demorou, mas parece que todas as linguagens mais atuais notaram que fazer
manualmente os getters e setters para toda variável de instância de uma classe não está com nada.
Aleluia irmãos, mas existe o Eclipse pra que a gente possa gerar tudo automático. Era isso ou boa parte
dos programadores Java estariam condenados a ter LER por conta do ocultamento de informação. Felizmente
a linguagem Groovy reparou nesta falta de praticidade e trouxe características interessantes. Perfect!
GroovyBeans funcionam como os JavaBeans mas utilizando uma sintaxe mais simples (se piorasse, pra quê linguagem nova, né?!). Observe o exemplo abaixo em Groovy:
import java.util.Date
class Customer {
Integer id
String name
Integer age
static void main(args)
{
def customer = new Customer(id:1, name:"Thania", age:21)
println("Hello ${customer.name}")
}
}
Saída:
Hello Thania
O código em Groovy acima é equivalente ao seguinte código Java:
import java.util.Date;
public class Customer {
private Integer id;
private String name;
private Integer age;
// Desce mais...
public Integer getId() {
return this.id;
}
// Mais um pouquinho...
public String getName() {
return this.name;
}
// Só mais algumas linhas...
public Integer getAge() {
return this.age;
}
// Finalmente chegamos nos setters...
// Calma, a classe já tá acabando.
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
// Sim, rola o scroll só mais um pouquinho...
public void setAge(Integer age) {
this.age = age;
}
// Ufa! Achei que não ía achar esse main nunca...
public static void main(String[] args) {
Customer customer = new Customer();
customer.setId(1);
customer.setName("Thania");
customer.setAge(21);
System.out.println("Hello " + customer.getName());
}
}
Gostei!
Dúvida:
como vc especifica que
Integer idé readonly, devendo ser gerado apenas o set? - afinal, se não em java funciona de forma equivalente (tirando o lance do constructor automático), é só colocar public na frenteEu lembro que em .NET existem ‘properties’, que não parecidas, mas que vc pode especificar que é read-only e especificar que o get e/ou o set são feitos na verdade chamando um método específico. Bem interessante.
Ou talvez a idéia do Eiffel, que é parecida com a do .NET (porém anterior, claro) mas com facilidades para alterar essa especificação em sub-classes.
Please comment
Oi, André! Desculpa a demora em responder, mas essa vida de TCC tá complicada… :’(
O site oficial da linguagem Groovy diz assim: “If you want a private or protected property you have to provide your own getter and setter which must be declared private or protected.”
Pelo que entendi e li até agora sobre isto, se vc quer um atributo read-only, o negócio é acrescentar um final:
… e, acredito eu, você ganharia apenas um get público. Também daria pra “sobrescrever” o set público default com protected fazendo assim:
Não me parece muito bonito e, na verdade, nem tinha pensado sobre isto antes de você comentar, mas acho que é isso.
Vou dar uma pesquisada, talvez tenha uma forma melhor. No site oficial não achei nada além disso. Vou dar uma olhada no livro que eu estou lendo, depois te dou um toque.
Olá Thânia, tudo bom? O Groovy te permite fazer isto também:
private String nome;
String getNome(){ return this.nome; }
Desta forma o atributo seria get-only.
Os getters e setters automáticos no Groovy só são criados quando o atributo não possui modificador de visibilidade, ou com modificador “default” se preferir.
Há! Eu sabia que tinha uma maneira melhor e mais bonita!!
Obrigada, David!!