Olá gente,
gostaria de saber se existe algum método em que eu possa imprimir todas as variáveis de um objeto, através do System.out.println();…
Exemplo:
Eu criei uma classe Funcionario que possui 3 strings e 2 doubles.
Eu construí um objeto joao, pertencente a esta classe, e setei os valores das variáveis.
Depois disso eu fiz uma série de mudanças através de métodos criados e gostaria de imprimir todas as variáveis de uma vez, sem precisar ficar dando System.out.println() para cada uma. Isso é possível?
Eu recomendaria você deixar de ser preguiçoso e sempre definir o método toString. Assim, você terá as seguintes vantagens:
Como é só para debugar seu programa, você pode escolher exatamente que campos você vai mostrar - em uma classe, há muitos campos que são lixo e você não precisa mostrar.
Um exemplo de campo lixo que vai ser mostrado se você usar reflection é o serialVersionUID, que normalmente não é relevante para você.
Você pode ver o objeto de forma mais amigável em debuggers como a IDE do Eclipse ou NetBeans, já que, quando o método toString está definido, a IDE chama esse método (e mostra só o que você quer ver) em vez de algo bizarro como LSeuPacote/SuaClasse;@1ab23ca ou coisa parecida.
E
entanglement1 like
Por exemplo:
classFuncionario{privateStringnome;privateintcod;...publicStringtoString(){returnString.format("nome = %s, cod = %d, endereco = %s",nome,cod,endereco);}}...Funcionariof1=newFuncionario();Funcionariof2=newFuncionario();...System.out.println(f1);// imprime "nome = Joao, cod = 100, endereco = R. dos Bobos, no. 0"System.out.println(f2);// imprime "nome = Maria, cod = 101, endereco = Av. Onde Judas perdeu as botas, no. 10000"
D
drsmachado1 like
Sem_Nome, reflection é realmente a única forma de fazer isso. Porém, penso que o Molin deseja fazer outra coisa. Ele quer pegar o objeto e imprimir os valores que foram associados a cada atributo, nos diferentes momentos em que ele foi modificando cada valor.
Para isso, ele pode sobrescrever o método toString, retornando todos os atributos e valores ou alguma informação específica.
publicclassTeste{privateStringnome;privateIntegeridade;//getters e setters@OverridepublicStringtoString(){return"Nome: Dr. "+nome+"\nIdade: "+idade+" anos";}}
E, assim que realizar alguma modificação nos valores:
Testeteste=newTeste();teste.setNome("Amâncio");teste.idade=200;System.out.println(teste);/* Saída: Nome: Dr. Amâncio Idade: 200 anos*/
S
Sleipbr
A melhor maneira será sobrescrevendo o método toString() …
V
Victor_Gerin
sobre escrever o método toString já me trouce muitas vantagens, mesmo por isso acho que é uma boa ideia você substituir ele é melhor
C
Caio.Sergio
Vamos lá.
Você poderia criar um método dentro da sua classe onde ele faz a impressão de todas as variáveis(atributos) da sua classe
ex:
publicclassTeste{//variaveisprivateStringv1;privateStringv2;privateStringv3;publicTeste(){//construtor incializacoes de variaveisv1="Joao";v2="Marcio";v3="Joana";}//Metodo que imprime todas as variaveis(atributos da classe)// Todas as variaveis da classe que deseja imprimir devem conter uma lista de pintln neste metodopublicimprimeValores(){System.out.println(v1);System.out.println(v2);System.out.println(v3);}}
Depos no codigo main é só chamar o metedo Imprime Valores e ele ira imprimir tudo, sem precisar fazer a impressao 1 por 1
publicclassTeste{//variaveisprivateStringv1;privateStringv2;privateStringv3;publicTeste(){//construtor incializacoes de variaveisv1="Joao";v2="Marcio";v3="Joana";}//Metodo que imprime todas as variaveis(atributos da classe)publicimprimeValores(){System.out.println(v1);System.out.println(v2);System.out.println(v3);}}publicstaticvoidmain(String[]args){Testeobjeto_teste=newTeste;teste.imprimeValores();//imprime todas as variaveis da classe}