Groovy #8: Construindo objetos através de Maps

Tempo de leitura: menos de 1 minuto

Fala galera,

Esta semana precisei criar um teste de um método que recebe um objeto por parâmetro. O problema era que eu tinha apenas um Map inicializado contendo todos os atributos e valores que precisava no objeto.

Lembrei então que o Groovy podia me ajudar nisto já que ele pode construir um objeto a partir de um mapa, desta forma:

[code language=”groovy”]
class Pessoa {
Integer idade
String nome
}
// 1) passando o mapa por parâmetro
def p1 = new Pessoa([idade: 36, nome: ‘Eder’])
assert 36 == p1.idade
assert ‘Eder’ == p1.nome

// 2) Explicitamente
def p2 = [idade: 36, nome: ‘Eder’] as Pessoa
assert 36 == p2.idade
assert ‘Eder’ == p2.nome

// 3) Implicitamente
Pessoa p3 = [idade: 36, nome: ‘Eder’]
assert 36 == p3.idade
assert ‘Eder’ == p3.nome
[/code]

Nota: Para usar em testes, esta forma de construir um objeto é muito legal, simples e fácil de fazer.

Só que apenas isso não era o suficiente. Eu também não tinha a classe (objeto), tinha apenas o full qualified name da classe, então não tinha com dar um new na classe ou usar outra forma de construição citado a cima.

Então, abri o Groovy web console e fiz alguns teste. Para minha surpresa fiz este teste e funcionou:

[code language=”groovy”]
class Pessoa {
Integer idade
String nome
}
def p1 = Class.forName(‘Pessoa’).newInstance([idade: 36, nome: ‘Eder’])
assert 36 == p1.idade
assert ‘Eder’ == p1.nome
[/code]

Basicamente, usei a reflexão do Java para criar o objeto através do full qualified name da classe Pessoa (no exemplo a cima, o full qualified name é “Pessoa”), e ao chamar o método newInstance, passei por parâmetro o Map. Não é que funcionou!! 🙂

Espero que possa ajuda-los

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *