Boa tarde, eu estou com uma dúvida eu gostaria de saber se é possível percorrer uma classe e pegar o valor dos seus atributos em tempo de execução Ex:[code]public class Busca
{
private String nome;
private short idade;
private Date dataDeNascimento;
public String getNome()
{
return nome;
}
public void setNome(String nome)
{
this.nome = nome;
}
public short getIdade()
{
return idade;
}
public void setIdade(short idade)
{
this.idade = idade;
}
public Date getDataDeNascimento()
{
return dataDeNascimento;
}
public void setDataDeNascimento(Date dataDeNascimento)
{
this.dataDeNascimento = dataDeNascimento;
}
}
[/code]
Essa e a minha classe na próxima etapa eu vou instanciá-la mas não vou preencher todos os seus atributos ex: [code]
Busca busca = new Busca();
busca.setNome(“teste”);
busca.setDataDeNascimento(new Date());
for(Field field : busca.getClass().getDeclaredFields())
{
field.setAccessible(true);
}
[/code]
e o que eu gostaria de saber é se existe como eu saber quais os atributos da classe estão preenchidos, ou se estou viajando na maionese, desde já meu muito obrigado.
Se para você “preenchido” quer dizer “!= null” então é simples se o campo for uma variável que aponta para um objeto.
No caso de variáveis de instância que são de tipos primitivos, não sei o que é “preenchido” para você. Zero é não-preenchido?[/quote]
Boma dia, “preenchido” para mim são os atributos que tiveram seu valor alterado, a idéia é percorrer a classe e pegar os todos os atributos que tiveram seus valores alterados para montar uma string para fazer uma consulta no BD.
Para você saber se um atributo teve seu valor ALTERADO, você deve ter o estado atual e o estado anterior (ou seja, 2 objetos) e comparar esses atributos para saber quais deles foram alterados.
Uma forma alternativa de você saber se um atributo teve seu valor alterado é o seguinte: para cada atributo da classe, crie um atributo do tipo boolean que indica se o atributo foi alterado ou não. Então o setter de cada atributo faz algo como:
e na hora de você fazer a consulta, você tem de checar esses atributos, e resetar cada desses “indicadores de atributo alterado”. (talvez você tenha de criar um método que resete todos os indicadores de uma vez, o que é bem mais simples). Viu que dá um certo trabalho, não?
[quote=entanglement]Para você saber se um atributo teve seu valor ALTERADO, você deve ter o estado atual e o estado anterior (ou seja, 2 objetos) e comparar esses atributos para saber quais deles foram alterados.
Uma forma alternativa de você saber se um atributo teve seu valor alterado é o seguinte: para cada atributo da classe, crie um atributo do tipo boolean que indica se o atributo foi alterado ou não. Então o setter de cada atributo faz algo como:
e na hora de você fazer a consulta, você tem de checar esses atributos, e resetar cada desses “indicadores de atributo alterado”. (talvez você tenha de criar um método que resete todos os indicadores de uma vez, o que é bem mais simples). Viu que dá um certo trabalho, não?
[/quote]