Devuelve una representación de cadena del objeto. En general, el toString
método devuelve una cadena que "representa textualmente" este objeto. El resultado debe ser una representación concisa pero informativa que sea fácil de leer para una persona. Se recomienda que todas las subclases anulen este método.
El toStringmétodo de clase Object
devuelve una cadena que consta del nombre de la clase de la que el objeto es una instancia, el carácter de signo de arroba "@" y la representación hexadecimal sin signo del código hash del objeto. En otras palabras, este método devuelve una cadena igual al valor de:
Espero que sepa que toStringno está diseñado ni es adecuado para fines de interfaz de usuario.
Powerslave
@Powerslave luego explica por qué todos los componentes de Swing se utilizan toStringpara mostrar un objeto en la GUI. Si tengo un objeto rico y quiero mostrarlo en una GUI, entonces no, no creo un renderizador adicional para él ni extraigo una propiedad de cadena del objeto para usarlo en la GUI, lo guardo simple e implementado toStringpara poder sortear todos esos gastos generales. Si desea hacer esto de una manera más limpia, cree una clase contenedora que esté dedicada a la interfaz de usuario e implemente su toStringmétodo para devolver una propiedad de cadena de la envoltura.
Timmos
1
@Timmos Si tus amigos saltaran de un puente, ¿los seguirías? El hecho de que los desarrolladores de Swing usen (lean; abusen) la función toString no significa que usted también deba hacerlo.
Toby Caulk
2
Es, con mucho, el enfoque más fácil para hacer el trabajo, dado que sigue usando la API Swing predeterminada. Si desea un renderizado personalizado, bien, instale un renderizador personalizado en su componente. Si solo desea mostrar un objeto representado por una cadena, implementar toString () es mucho más fácil en comparación con un renderizador personalizado, que tiene todo tipo de trampas para hacerlo bien. Creo que tu comparación con saltar de un puente es extraña.
Timmos
35
El toString()método devuelve una representación textual de un objeto. Ya se incluye una implementación básica java.lang.Objecty, debido a que todos los objetos heredados de java.lang.Objectella, se garantiza que todos los objetos en Java tienen este método.
Anular el método siempre es una buena idea, especialmente cuando se trata de depurar, porque los depuradores a menudo muestran objetos por el resultado del toString()método. Por lo tanto, use una implementación significativa, pero úsela con fines técnicos . La lógica de la aplicación debe usar getters:
Opcionalmente, puede tener usos dentro del contexto de una aplicación, pero con mucha más frecuencia se usa con fines de depuración. Por ejemplo, cuando llega a un punto de interrupción en un IDE, es mucho más fácil leer una cantidad significativa toString()de objetos que inspeccionar sus miembros.
No hay un requisito establecido sobre lo toString()que debe hacer un método. Por convención, la mayoría de las veces le indicará el nombre de la clase y el valor de los miembros de datos pertinentes. La mayoría de las veces, los toString()métodos se generan automáticamente en IDE.
Depender de una salida particular de un toString()método o analizarla dentro de un programa es una mala idea. Hagas lo que hagas, no sigas ese camino.
¿Podría dar más detalles sobre su última declaración?
Jean-Philippe Caruana
13
toString () devuelve una cadena / representación textual del objeto. El método toString (), que se utiliza comúnmente para fines de diagnóstico como depuración, registro, etc., se utiliza para leer detalles significativos sobre el objeto.
Se invoca automáticamente cuando el objeto se pasa a println, print, printf, String.format (), assert o el operador de concatenación de cadenas.
La implementación predeterminada de toString () en la clase Object devuelve una cadena que consta del nombre de clase de este objeto seguido del signo @ y la representación hexadecimal sin firmar del código hash de este objeto utilizando la siguiente lógica,
Bourne's current location - Coordinates@addbf1 //concise, but not really useful to the reader
Ahora, anulando toString () en la clase Coordenadas como se muestra a continuación,
@OverridepublicString toString(){return"("+ x +", "+ y +")";}
resultados en
Bourne's current location - (1.0, 2.0) //concise and informative
La utilidad de anular toString () se vuelve aún mayor cuando el método se invoca en colecciones que contienen referencias a estos objetos. Por ejemplo, lo siguiente
Casi siempre debería anular el método toString (). Uno de los casos en los que no se requeriría la anulación son las clases de utilidad que agrupan métodos de utilidad estáticos, a la manera de java.util.Math . El caso de que no se requiera anular es bastante intuitivo; casi siempre lo sabrías.
La cadena devuelta debe ser concisa e informativa, idealmente autoexplicativa.
Al menos, los campos utilizados para establecer la equivalencia entre dos objetos diferentes, es decir, los campos utilizados en la implementación del método equals () deben ser escupidos por el método toString ().
Proporcione descriptores de acceso / captadores para todos los campos de instancia contenidos en la cadena devuelta. Por ejemplo, en la clase Coordenadas,
Si no está acostumbrado a toString () en la clase Pojo (Student.java), obtendrá un resultado como [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]. Para evitar este tipo de problema, estamos usando el método toString ().
El propósito principal de toString es generar una representación de cadena de un objeto, lo que significa que el valor de retorno es siempre una cadena. En la mayoría de los casos, esto es simplemente la clase del objeto y el nombre del paquete, pero en algunos casos como StringBuilder, en realidad obtendrá un 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();}
Si aprendes Python primero y luego Java. Creo que juega el mismo papel que el __str__()método en Python, es un método mágico como __dict__()y, __init__()pero para referirse a una cadena que representa el objeto.
Respuestas:
De los
Object.toString
documentos:Ejemplo:
fuente
Uso de
String.toString
:Siempre que necesite explorar el constructor llamado valor en el
String
formulario, simplemente puede usarString.toString
... por ejemplo ...... copia este programa en tu Eclipse y ejecútalo ... obtendrás las ideas sobre
String.toString
...fuente
toString
no está diseñado ni es adecuado para fines de interfaz de usuario.toString
para mostrar un objeto en la GUI. Si tengo un objeto rico y quiero mostrarlo en una GUI, entonces no, no creo un renderizador adicional para él ni extraigo una propiedad de cadena del objeto para usarlo en la GUI, lo guardo simple e implementadotoString
para poder sortear todos esos gastos generales. Si desea hacer esto de una manera más limpia, cree una clase contenedora que esté dedicada a la interfaz de usuario e implemente sutoString
método para devolver una propiedad de cadena de la envoltura.El
toString()
método devuelve una representación textual de un objeto. Ya se incluye una implementación básicajava.lang.Object
y, debido a que todos los objetos heredados dejava.lang.Object
ella, se garantiza que todos los objetos en Java tienen este método.Anular el método siempre es una buena idea, especialmente cuando se trata de depurar, porque los depuradores a menudo muestran objetos por el resultado del
toString()
método. Por lo tanto, use una implementación significativa, pero úsela con fines técnicos . La lógica de la aplicación debe usar getters:fuente
Opcionalmente, puede tener usos dentro del contexto de una aplicación, pero con mucha más frecuencia se usa con fines de depuración. Por ejemplo, cuando llega a un punto de interrupción en un IDE, es mucho más fácil leer una cantidad significativa
toString()
de objetos que inspeccionar sus miembros.No hay un requisito establecido sobre lo
toString()
que debe hacer un método. Por convención, la mayoría de las veces le indicará el nombre de la clase y el valor de los miembros de datos pertinentes. La mayoría de las veces, lostoString()
métodos se generan automáticamente en IDE.Depender de una salida particular de un
toString()
método o analizarla dentro de un programa es una mala idea. Hagas lo que hagas, no sigas ese camino.fuente
toString () devuelve una cadena / representación textual del objeto. El método toString (), que se utiliza comúnmente para fines de diagnóstico como depuración, registro, etc., se utiliza para leer detalles significativos sobre el objeto.
Se invoca automáticamente cuando el objeto se pasa a println, print, printf, String.format (), assert o el operador de concatenación de cadenas.
La implementación predeterminada de toString () en la clase Object devuelve una cadena que consta del nombre de clase de este objeto seguido del signo @ y la representación hexadecimal sin firmar del código hash de este objeto utilizando la siguiente lógica,
Por ejemplo, lo siguiente
huellas dactilares
Ahora, anulando toString () en la clase Coordenadas como se muestra a continuación,
resultados en
La utilidad de anular toString () se vuelve aún mayor cuando el método se invoca en colecciones que contienen referencias a estos objetos. Por ejemplo, lo siguiente
huellas dactilares
en lugar de esto,
Pocos consejos de implementación,
Proporcione descriptores de acceso / captadores para todos los campos de instancia contenidos en la cadena devuelta. Por ejemplo, en la clase Coordenadas,
En el artículo 10 del libro, Effective Java ™, Second Edition, de Josh Bloch, se incluye una cobertura completa del método toString ().
fuente
Codificación:
Estudiante.java:
Salida:
Si no está acostumbrado a toString () en la clase Pojo (Student.java), obtendrá un resultado como
[com.steve.test.Student@6e1408, com.steve.test.Student@e53108]
. Para evitar este tipo de problema, estamos usando el método toString ().fuente
Siempre que acceda a un objeto (que no sea una cadena) en un contexto de cadena, el compilador invoca a toString () oculto.
Esta es la razón por
funciona, y al anular el estándar toString () de Object en sus propias clases, puede hacer que sus objetos también sean útiles en contextos de String.
(¡y considérelo una caja negra! Nunca, nunca use el contenido para otra cosa que no sea presentarle a un humano)
fuente
El método toString correctamente anulado puede ayudar en el registro y la depuración de Java.
fuente
Aparte de lo que Cletus respondió con respecto a la depuración, se usa cada vez que genera un objeto, como cuando usa
o
fuente
El propósito principal de toString es generar una representación de cadena de un objeto, lo que significa que el valor de retorno es siempre una cadena. En la mayoría de los casos, esto es simplemente la clase del objeto y el nombre del paquete, pero en algunos casos como StringBuilder, en realidad obtendrá un String-text.
fuente
fuente
Si aprendes Python primero y luego Java. Creo que juega el mismo papel que el
__str__()
método en Python, es un método mágico como__dict__()
y,__init__()
pero para referirse a una cadena que representa el objeto.fuente
la
toString()
convierte el objeto especificado en un valor de cadena.fuente