Retorna uma representação de string do objeto. Em geral, o toString
método retorna uma string que "representa textualmente" este objeto. O resultado deve ser uma representação concisa, mas informativa, de fácil leitura para uma pessoa. É recomendável que todas as subclasses substituam esse método.
O toStringmétodo para class Object
retorna uma string que consiste no nome da classe da qual o objeto é uma instância, o caractere arroba `@ 'e a representação hexadecimal sem sinal do código hash do objeto. Em outras palavras, este método retorna uma string igual ao valor de:
Espero que você esteja ciente de que toStringnão se destina e não é adequado para fins de interface do usuário.
Powerslave,
@Powerslave então explica por que todos os componentes Swing estão usando toStringpara exibir um objeto na GUI? Se eu tenho um objeto rico e quero mostrá-lo em uma GUI, então não, eu não crio um renderizador extra para ele nem extraio uma propriedade de string do objeto para usar na GUI, eu a mantenho simples e implementa toStringpara poder contornar toda essa sobrecarga. Se você quiser fazer isso de uma maneira mais limpa, crie uma classe de invólucro que seja dedicada para fins de IU e implemente seu toStringmétodo para retornar uma propriedade de string do invólucro.
Timmos
1
@Timmos Se seus amigos pulassem de uma ponte, você o seguiria? Só porque os desenvolvedores do Swing usam (leia; abuse), a função toString não significa que você também deve usar.
Toby Caulk
2
É de longe a abordagem mais fácil para realizar o trabalho, visto que você continua usando a API Swing padrão. Se você quiser renderização customizada, tudo bem, instale um renderizador customizado em seu componente. Se você deseja apenas exibir um objeto representado por uma String, implementar toString () é muito mais fácil em comparação com um renderizador personalizado, que tem todos os tipos de armadilhas para fazer isso da maneira certa. Acho que sua comparação com pular de uma ponte é estranha.
Timmos
35
O toString()método retorna uma representação textual de um objeto. Uma implementação básica já está incluída em java.lang.Objecte, portanto, como todos os objetos herdam java.lang.Objectdela, é garantido que todo objeto em Java possui este método.
Substituir o método é sempre uma boa ideia, especialmente quando se trata de depuração, porque os depuradores geralmente mostram objetos pelo resultado do toString()método. Portanto, use uma implementação significativa, mas use-a para fins técnicos . A lógica do aplicativo deve usar getters:
Ele pode opcionalmente ter usos dentro do contexto de um aplicativo, mas com muito mais freqüência é usado para fins de depuração. Por exemplo, quando você atinge um ponto de interrupção em um IDE, é muito mais fácil ler um ponto de interrupção significativotoString() objetos do que inspecionar seus membros.
Não há um requisito definido para o que um toString()método deve fazer. Por convenção, na maioria das vezes ele informará o nome da classe e o valor dos membros de dados pertinentes. Na maioria das vezes, os toString()métodos são gerados automaticamente em IDEs.
Depender de uma saída específica de um toString()método ou analisá-la dentro de um programa é uma má ideia. Faça o que fizer, não vá por esse caminho.
toString () retorna uma string / representação textual do objeto. Normalmente usado para fins de diagnóstico, como depuração, registro, etc., o método toString () é usado para ler detalhes significativos sobre o objeto.
Ele é chamado automaticamente quando o objeto é passado para println, print, printf, String.format (), assert ou o operador de concatenação de string.
A implementação padrão de toString () na classe Object retorna uma string que consiste no nome da classe deste objeto seguido pelo sinal @ e a representação hexadecimal sem sinal do código hash deste objeto usando a seguinte lógica,
Bourne's current location - Coordinates@addbf1 //concise, but not really useful to the reader
Agora, substituindo toString () na classe Coordinates como abaixo,
@OverridepublicString toString(){return"("+ x +", "+ y +")";}
resulta em
Bourne's current location - (1.0, 2.0) //concise and informative
A utilidade de substituir toString () torna-se ainda mais quando o método é invocado em coleções que contêm referências a esses objetos. Por exemplo, o seguinte
Você quase sempre deve substituir o método toString (). Um dos casos em que a substituição não seria necessária são as classes de utilitários que agrupam métodos de utilitários estáticos, na forma de java.util.Math . O caso de não ser necessário substituir é bastante intuitivo; quase sempre você saberia.
A string retornada deve ser concisa e informativa, idealmente autoexplicativa.
Pelo menos, os campos usados para estabelecer equivalência entre dois objetos diferentes, isto é, os campos usados na implementação do método equals () devem ser cuspidos pelo método toString ().
Fornece acessadores / getters para todos os campos de instância contidos na string retornada. Por exemplo, na classe Coordenadas,
Se você não está acostumado com toString () na classe Pojo (Student.java), você receberá uma saída como [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]. Para evitar esse tipo de problema, estamos usando o método toString ().
O objetivo principal de toString é gerar uma representação String de um objeto, o que significa que o valor de retorno é sempre uma String. Na maioria dos casos, este é simplesmente a classe do objeto e o nome do pacote, mas em alguns casos, como StringBuilder, você obterá na verdade um String-text.
/**
* This toString-Method works for every Class, where you want to display all the fields and its values
*/publicString toString(){StringBuffer sb =newStringBuffer();Field[] fields = getClass().getDeclaredFields();//Get all fields incl. private onesfor(Field field : fields){try{
field.setAccessible(true);String key=field.getName();String value;try{
value =(String) field.get(this);}catch(ClassCastException e){
value="";}
sb.append(key).append(": ").append(value).append("\n");}catch(IllegalArgumentException e){
e.printStackTrace();}catch(SecurityException e){
e.printStackTrace();}catch(IllegalAccessException e){
e.printStackTrace();}}return sb.toString();}
Se você aprender Python primeiro e depois Java. Eu acho que ele desempenha o mesmo papel que o __str__()método em Python, é um método mágico como __dict__()e, __init__()mas para se referir a uma string que representa o objeto.
Respostas:
Dos
Object.toString
documentos:Exemplo:
fonte
Uso de
String.toString
:Sempre que precisar explorar o construtor chamado valor no
String
formulário, você pode simplesmente usarString.toString
... para um exemplo ...... copie este programa em seu Eclipse e execute-o ... você obterá as idéias sobre
String.toString
...fonte
toString
não se destina e não é adequado para fins de interface do usuário.toString
para exibir um objeto na GUI? Se eu tenho um objeto rico e quero mostrá-lo em uma GUI, então não, eu não crio um renderizador extra para ele nem extraio uma propriedade de string do objeto para usar na GUI, eu a mantenho simples e implementatoString
para poder contornar toda essa sobrecarga. Se você quiser fazer isso de uma maneira mais limpa, crie uma classe de invólucro que seja dedicada para fins de IU e implemente seutoString
método para retornar uma propriedade de string do invólucro.O
toString()
método retorna uma representação textual de um objeto. Uma implementação básica já está incluída emjava.lang.Object
e, portanto, como todos os objetos herdamjava.lang.Object
dela, é garantido que todo objeto em Java possui este método.Substituir o método é sempre uma boa ideia, especialmente quando se trata de depuração, porque os depuradores geralmente mostram objetos pelo resultado do
toString()
método. Portanto, use uma implementação significativa, mas use-a para fins técnicos . A lógica do aplicativo deve usar getters:fonte
Ele pode opcionalmente ter usos dentro do contexto de um aplicativo, mas com muito mais freqüência é usado para fins de depuração. Por exemplo, quando você atinge um ponto de interrupção em um IDE, é muito mais fácil ler um ponto de interrupção significativo
toString()
objetos do que inspecionar seus membros.Não há um requisito definido para o que um
toString()
método deve fazer. Por convenção, na maioria das vezes ele informará o nome da classe e o valor dos membros de dados pertinentes. Na maioria das vezes, ostoString()
métodos são gerados automaticamente em IDEs.Depender de uma saída específica de um
toString()
método ou analisá-la dentro de um programa é uma má ideia. Faça o que fizer, não vá por esse caminho.fonte
toString () retorna uma string / representação textual do objeto. Normalmente usado para fins de diagnóstico, como depuração, registro, etc., o método toString () é usado para ler detalhes significativos sobre o objeto.
Ele é chamado automaticamente quando o objeto é passado para println, print, printf, String.format (), assert ou o operador de concatenação de string.
A implementação padrão de toString () na classe Object retorna uma string que consiste no nome da classe deste objeto seguido pelo sinal @ e a representação hexadecimal sem sinal do código hash deste objeto usando a seguinte lógica,
Por exemplo, o seguinte
estampas
Agora, substituindo toString () na classe Coordinates como abaixo,
resulta em
A utilidade de substituir toString () torna-se ainda mais quando o método é invocado em coleções que contêm referências a esses objetos. Por exemplo, o seguinte
estampas
em vez disso,
Poucos indicadores de implementação,
Fornece acessadores / getters para todos os campos de instância contidos na string retornada. Por exemplo, na classe Coordenadas,
Uma cobertura abrangente do método toString () está no Item 10 do livro Effective Java ™, Second Edition, de Josh Bloch.
fonte
Codificação:
Student.java:
Resultado:
Se você não está acostumado com toString () na classe Pojo (Student.java), você receberá uma saída como
[com.steve.test.Student@6e1408, com.steve.test.Student@e53108]
. Para evitar esse tipo de problema, estamos usando o método toString ().fonte
Sempre que você acessa um objeto (não sendo uma string) em um contexto de string, o toString () é chamado de forma oculta pelo compilador.
Isso é por que
funciona, e substituindo o toString () padrão de Object em suas próprias classes, você pode tornar seus objetos úteis também em contextos de String.
(e considere isso uma caixa preta! Nunca, jamais use o conteúdo para outra coisa senão apresentar a um humano)
fonte
O método toString substituído corretamente pode ajudar na criação de log e depuração de Java.
fonte
Além do que cletus respondeu com relação à depuração, ele é usado sempre que você produz um objeto, como quando você usa
ou
fonte
O objetivo principal de toString é gerar uma representação String de um objeto, o que significa que o valor de retorno é sempre uma String. Na maioria dos casos, este é simplesmente a classe do objeto e o nome do pacote, mas em alguns casos, como StringBuilder, você obterá na verdade um String-text.
fonte
fonte
Se você aprender Python primeiro e depois Java. Eu acho que ele desempenha o mesmo papel que o
__str__()
método em Python, é um método mágico como__dict__()
e,__init__()
mas para se referir a uma string que representa o objeto.fonte
o
toString()
converte o objeto especificado em um valor de string.fonte