Reflection

4 respostas
CristianPalmaSola10

Tenho a seguinte classe:

package com.urbainski.tablemodel.entidade;

import com.urbainski.tablemodel.annotation.TableModelColumnDateFormatter;
import com.urbainski.tablemodel.annotation.TableModelColumnBooleanFormatter;
import com.urbainski.tablemodel.annotation.TableModelColumn;
import java.util.Date;

/**
 * @author Cristian Urbainski
 * @since 07/07/2012
 */
public class Pessoa {
    
    @TableModelColumn(nameColumn="Nome", numberColumn="1")
    private String nome;
    
    @TableModelColumn(nameColumn="Idade", numberColumn="2")
    private Integer idade;
    
    @TableModelColumn(nameColumn="Data Nascimento", numberColumn="3")
    @TableModelColumnDateFormatter
    private Date nascimento;
    
    @TableModelColumn(nameColumn="Sexo", numberColumn="4")
    @TableModelColumnBooleanFormatter(showOfTrue="Homem", showOfFalse="Mulher")
    private Boolean ehHomem;

    public Pessoa() {
    }

    public Boolean getEhHomem() {
        return ehHomem;
    }

    public void setEhHomem(Boolean ehHomem) {
        this.ehHomem = ehHomem;
    }

    public Integer getIdade() {
        return idade;
    }

    public void setIdade(Integer idade) {
        this.idade = idade;
    }

    public Date getNascimento() {
        return nascimento;
    }

    public void setNascimento(Date nascimento) {
        this.nascimento = nascimento;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
    
}

e faço

Field fiels[] = classe.getFields();

So que o array fica fazio, poderiam me dizer porque ?

4 Respostas

Rodrigo_Sasaki

se tivesse buscado na documentação matava a charada rapidinho.

Ou seja, o array só sera populado com os membros públicos da classe.

CristianPalmaSola10

depois de posta aqui eu fiz um teste trocando um atributo pra public e ele foi pro array, mas me diz ai como funciona com o @Id, e tals, sempre o atributo é privato e como ele faz pra pegar o valor de um atributo ele invoca o metodo get ?

R

use getDeclaredFields()…

Assim você terá todos os atributos da classe. Inclusive os privados.

Ataxexe

Lembre-se, também, de que o getDeclaredFields não retorna os atributos das superclasses, ou seja, se tiver herança no meio você precisa iterar pelas superclasses e buscar os atributos delas. Também deverá alterá-lo para acessível (usando o setAccessible) caso queira obter seu valor.

Hoje eu nem penso duas vezes e uso alguma biblioteca pra reflexão, fazer isso na mão é um saco.

Criado 7 de julho de 2012
Ultima resposta 9 de jul. de 2012
Respostas 4
Participantes 4