Recuperar valores dos Atributos da Classe em tempo de execução

4 respostas
M
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:
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;
    }
}
Essa e a minha classe na próxima etapa eu vou instanciá-la mas não vou preencher todos os seus atributos ex:
Busca busca = new Busca();
        busca.setNome("teste");
        busca.setDataDeNascimento(new Date());

        for(Field field : busca.getClass().getDeclaredFields())
        {
            field.setAccessible(true);           
        }
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.

4 Respostas

E

Defina “preenchido”.

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?

M

entanglement:
Defina “preenchido”.

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?

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.

E

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:

private string nome;
private boolean nomeAlterado;
public void setNome (String nome) {
    if (! this.nome.equals (nome)) {
        nomeAlterado = true;
        this.nome = nome;
    }
}

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?

M

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:

private string nome;
private boolean nomeAlterado;
public void setNome (String nome) {
    if (! this.nome.equals (nome)) {
        nomeAlterado = true;
        this.nome = nome;
    }
}

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?

Criado 19 de março de 2013
Ultima resposta 20 de mar. de 2013
Respostas 4
Participantes 2