Bem segundo a pesquisa que tive isso seria possivel usando reflexões.
tenho uma classe com variaveis privadas
package br.com.folhax.beans;
/**
*
* @author Matheus
*/
public class Cbo {
private int cbocodigo;
private String cbodescricao;
/**
* @return the cbocodigo
*/
public int getCbocodigo() {
return cbocodigo;
}
/**
* @param cbocodigo the cbocodigo to set
*/
public void setCbocodigo(int cbocodigo) {
this.cbocodigo = cbocodigo;
}
/**
* @return the cbodescricao
*/
public String getCbodescricao() {
return cbodescricao;
}
/**
* @param cbodescricao the cbodescricao to set
*/
public void setCbodescricao(String cbodescricao) {
this.cbodescricao = cbodescricao;
}
}
Quero usar reflexões para em outra classe obter essas variaveis privadas (cbocodigo, cbodescricao) e imprimir o nome delas com System.out.println(), ou seja, eu passo um objeto para ele e ele imprime o nome das variaveis privadas que existem no objeto que eu mandei.
Isso é possivel como reflexões? Como?
O método getFields ( http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getFields() ) retorna apenas os campos públicos (não os privados) desta classe e de suas subclasses, caso existirem.
O método getDeclaredFields ( http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getDeclaredFields() ) retorna os campos declarados nesta classe - não importando se são públicos, privados ou protegidos.
Provavelmente você quer usar o getDeclaredFields.
import java.lang.reflect.*;
import java.util.*;
class ImprimirNomesVariaveisInstancia {
public List<String> listarNomesVariaveis (Object obj) throws Exception {
Class<?> klass = obj.getClass();
Field[] fields = klass.getDeclaredFields();
List<String> nomes = new ArrayList<String>();
for (Field field : fields) {
nomes.add (field.getName());
}
return nomes;
}
public static void main (String[] args) throws Exception {
// Note que a classe java.lang.String tem vários campos, alguns deles estáticos
// como serialVersionUID, e outros deles variáveis de instância, como value, offset e
count.
System.out.println (new ImprimirNomesVariaveisInstancia().listarNomesVariaveis (" objeto
string "));
}
}
show de bola tio
mas ele me retorna completo
private int Matematica.teste1
private java.lang.String Matematica.teste2
tem como pegar só o nome do campo (teste1, teste2) ?
O nome do campo (ex. “teste1”) vem como Field.getName()
O nome com descrição de tipo etc. (ex. “private java.lang.String Matematica.teste2”) é retornado por Field.toString()