Bom, garanto que você esta se questionando o porquê deste titulo bizarro. Tentarei esclarecer esta questão...
Ao contrario de muitos candidatos, o toString fará e mostrará o que você quer,(claro desde que seja programado para isto), mas se você não o sobrepor, ele só fará e mostrará o que já lhe vem programado a fazer, mostrará só um monte de coisas que você não entederá, códigos e símbolos muito estranhos, que vem da classe object.
Agora tentarei descrever de uma forma um pouco mais técnica o porquê se deve sempre sobrepor o toString.
Embora java.lang.Object forneça uma implementação do método toString, geralmente a string que ele retorna não é a que o usúario de sua classe vai querer ver. Ela é composta pelo nome da classe seguindo de uma "arroba(@)" e da representação do código de hash em hexadecimal sem sinal, por exemplo, "PhoneNumber@163b91". Ela deve ser uma representação concisa, mas não é tão facil de entender e ler se for comparado a "(53)3232-3232".
Fornecer uma boa implementação de toString tornará sua classe mais agradável de usar, o método toString é chamado automaticamente quando um objeto é passado para println, printf, para o operador de concatenação de strings ou para assert, ou exibido por um depurador. Para ser considerado prático, o método toString deve retornar todas as informações interessantes contidas no objeto, quando implementa-lo deve-se especificar o formato do valor de retorno na documentação.
A vantagem de especificar o formato é que ele serve como uma representação do objeto que é padrão, clara e legível por humanos.
A desvantagem de especificar o formato do valor de retorno, é que uma vez especificado você ficará preso a ele indefinidamente, supondo que sua classe seja muito usada. Se você alterar a representação em uma versão futura, invalidára seus códigos e dados e eles reclamarão.
Ao não especificar um formato, você preservará a flexiblidade de inclusão de informações ou aperfeiçoamento do formato em uma versão subsequente.
Decidindo ou não especificar o formato, não se esqueça em documentar claramente suas intenções.
Exemplo sem sobrepor o toString
public class Cliente { private String nome; public Cliente(String nome) { this.nome = nome; } //@Override //public String toString() { //return "O Melhor Jogador do TADS eh = " + nome; //} public static void main(String[] args) { Cliente cliente = new Cliente("Falcãozinho Gaucho!"); System.out.println(cliente); } } //Resposta com toString de Object (Cliente@1509443)
Exemplo sobrepondo o toString
public class Cliente { private String nome; public Cliente(String nome) { this.nome = nome; } @Override public String toString() { return "O Melhor Jogador do TADS eh = " + nome; } public static void main(String[] args) { Cliente cliente = new Cliente("Falcãozinho Gaucho!"); System.out.println(cliente); } }
//Resposta com toString de sobrescrito (O Melhor Jogador do TADS eh = Falcãozinho Gaucho!)
Referência: Java Efetivo, de Joshua Bloch
Nenhum comentário:
Postar um comentário