Olá desenvolvedores, bora conhecer o método toString nosso tema de hoje? A função do toString é retornar um objeto String. Ele é um padrão fornecido pelo Java por meio da classe java.lang.Object, e por este motivo é herdado por todas as classes do Java.

Assim, se tem nos acompanhado nesta série sobre orientação a objetos, é provável que tenha algumas linhas de códigos implementadas. Então proceda da seguinte forma, na classe main, comente todo o seu código, deixando apenas o objeto aluno instanciado.

Aluno aluno = new Aluno();

Agora por meio do objeto System.out, que aliás, nos permite exibir Strings no console, vamos chamar o método toString(). Após, executar e ver o que será exibido no terminal.

System.out.println(aluno.toString());

Abaixo o resultado da linha de comando que implementamos chamando o método toString(). Concordo que o que ele retorna, não é mesmo nada amigável. O nome da classe, seguida pelo símbolo arroba (@) e pela representação de um código de hash hexadecimal.

Em outras palavras o que ocorreu é que o nosso objeto foi armazenado em uma estrutura referenciada por uma chave – o hash hexadecimal. Para cada objeto haverá um código distinto, que o identifica e permite que as informações sejam acessadas de forma rápida.

Se instanciarmos um novo objeto e chamarmos de novo o método, este será alocado em uma nova posição. Ou seja, uma nova chave será atribuída a ele.

aluno = new Aluno();
System.out.println(aluno.toString());

Apesar das vantagens este retorno ao usuário, como já mencionado, não é nada intuitivo. O que ele deveria retornar é uma informação de fácil leitura para o usuário, e não o código acima. É neste contexto que se insere a recomendação do próprio toString de sobreposição das subclasses.

O toString é chamado de forma automática sempre que passamos um objeto para o println ou printf.

TOSTRING BENEFÍCIOS DA SOBREPOSIÇÃO

O método toString está diretamente relacionado as instâncias da classe e por conseguinte aos objetos que carregam referências as essas instâncias. Isto é, ele retorna todas as informações importantes contidas no objeto. Por exemplo, quando instanciamos um objeto nós o “alocamos” em uma variável. Esta variável na verdade não guarda um valor, mas sim faz uma referência a este objeto na memória.

Acompanhe o raciocínio, a classe Aluno, recebe os atributos do aluno, bem como os métodos getters e setters. Por outro lado, a classe responsável pelo processamento e exibição destes dados é a classe autoexecutável main.

Desse modo, quando falamos que o toString é chamado de forma automática, em síntese significa que tanto faz chama-lo ou não. Poderíamos apenas imprimir o objeto na classe principal como mostra o exemplo abaixo, o efeito é o mesmo.

aluno = new Aluno();
System.out.println(aluno);

Porém, em um cenário acadêmico onde em uma secretaria escolar, este “tanto faz”, seria prejudicial. Se secretária responsável estivesse tentando acessar os dados do aluno, ela ficaria desapontada e frustrada. Visto que para ela este retorno é inútil, não informa nada do que ela precisa saber.

É aí que nós poderemos ajudá-la. Poderemos corrigir este problema sobrepondo o método toString, para que ele retorne algo mais intuitivo. Algo que seja mais amigável a leitura.

GERANDO O TOSTRING

Em uma área livre da classe Aluno, clique com o botão contexto do mouse, [source => Generate toString()…].

E gere o toString para todos os atributos que você julgar interessante exibir, após selecionar clique em [Generate].

O toString vai gerar uma String que funciona como uma espécie de identificação do campo em questão. Assim, concatenado com o atributo, que pode ser substituído pelo método get.

Se executarmos o programa, certamente teremos como retorno uma resposta melhor do que apenas o nome da classe e um código.

Claro que como não passamos nenhum dado, todos os nossos atributos estão nulos. Dessa forma, para que possamos exibir algo interessante. Retire as barras indicadoras de comentário do seu código, veja se os dados que estão passados são os que deseja exibir.

Mas repare que não estamos chamando os métodos, poderemos chama-los separadamente como no exemplo abaixo.

Após executar, a saída no console será como mostrado abaixo, note que optei por não exibir todos os dados. Sugiro que faça o mesmo, mas antes imprima todos os dados e depois selecione apenas alguns para imprimir na tela. Brinque com o código, veja como funciona e se familiarize com a linguagem.

EM POUCAS PALAVRAS

Conseguimos então com o uso do toString obter um resultado mais claro e útil para o usuário. E sem nenhuma dúvida com uma aparência muito mais amigável. Assim, no tutorial de hoje estudamos o método toString e as vantagens em usá-lo. Além de aprendermos a adotar melhores práticas na utilização deste método.