Método toString

4 respostas
V
public String toString () {
		String deps = "";
		
		Iterator i = this.dependentes.iterator();
				
		while(i.hasNext()) {
			deps += "\n" + i.next();
		}
		return (String) deps;
	}

esse método esta imprimindo o nome da classe + @ + endereço hexadecimal
ex.: Avulso@26e431

gostaria que imprimisse o valor do objeto

desde ja obrigado

4 Respostas

V

na minha hierarquia de classe eu estava implementando o toString na classe errada … coloquei na superclasse e funcionou

obrigado

Mantu

Só algumas considerações:
1)Pelo o que vc respondeu:

Parece que vc tinha uma classe Filho que herda de uma classe Pai, e que vc tinha implementado o método toString() na classe Filho, e que, ao tirar esse método da classe Filho e implementá-la na classe Pai, passou a funcionar seu programa.
Eu acho que você não implementou na classe errada o toString(). Se Filho herda de Pai, e a classe Filho tem aquela implementação de toString() que vc postou, então a invocação deste método só iria retornar aquele negócio de <nome_classe>@, se vc invocou o toString() a partir de um objeto da classe Pai ao invéz da classe Filho. Confuso? Vamos a um exemplo:
Supondo que o toString() esteja implementado na classe Filho, o seguinte programa:

public class Teste{
	public static void main(String[] params){
		Pai umPai = new Pai(/*Alguma coisa aqui*/);
		Pai umFilho = new Filho(/*Alguma coisa aqui*/);
		
		System.out.println("'umPai' em formato textual:" + umPai.toString());
		System.out.println("'umFilho' em formato textual:" + umFilho.toString());
		System.exit(0);
	}
}

Iria produzir a seguinte saída de texto:

'umPai' em formato textual: um.pacote.qualquer.Pai@45f3dee
'umFilho' em formato textual: 
dependente01
dependente02
...
dependente-n

Acho que talvez vc tenha invocado o toString() a partir de um objeto da sua superclasse. Como sua superclasse não implementava o toString(), ela deixava o toString() do parente superior mais próximo assumir (que nesse caso era o toString() da classe Object). Por isso que quando vc moveu o toString() da classe pra super classe “deu certo”.
Procure na net algum material sobre herança e polimorfismo, que aí vc vai ver que do jeito que estava, estava certo (e certo sem aspas :lol: ).

2)Se não me engano, quando vc invoca o toString() de um objeto que não implementa esse método (utiliza, por herança, o toString() da classe Object), o que vem escrito depois do “@” não é necessariamente o endereço (do objeto, eu presumo) hexadecimal. O que vem depois do “@” é obtido assim:

Integer.toHexString(hashCode())

Então, o que vem depois do “@” vai depender de como a classe do objeto implementa o método hashCode(). Se ele não implementer, e acabar deixando o método hashCode() da classe Object “assumir”, aí o que teremos depois do “@” é um hexadecimal que representa um inteiro, que por sua vez é uma conversão do endereço interno do objeto.

Qualquer coisa, poste mais, ok!

Eduardo_Bregaida

Não sei se vai ajudar, eu uso esse metodo nos meus Getters e Setters na classe dos POJOS.

por exemplo Categoria.java

public String toString () { return getClass().getName() + "codigo = " + getCodigo() + " - Desc = " + getDescricao(); }

AlexSlender

eu uso nos getter e setters tambem..

public String toString() {
		return titulo+" "+artista;
	}
	
	public String getAutor() {
		return titulo;
	}
	public void setAutor(String autor) {
		this.titulo = autor;
	}
Criado 31 de agosto de 2006
Ultima resposta 9 de mai. de 2008
Respostas 4
Participantes 4