2011-01-21 10 views
5
class Address 
{ 
    private enum Component 
    { 
    NUMBER, 
    STREET, 
    STATE, 
    COUNTRY 
    } 

    private Map<Component, String> componentToValue = ...; 
} 

Me gustaría que mi clase para contener dos métodos:toString(): para la depuración o para humanos?

  1. uno para indicar el valor de cada componente de la dirección (para que pueda depurar si algo va mal).
  2. Uno para devolver la dirección en una forma esperada por humanos: "1600 Amphitheatre Parkway Mountain View, CA 94043".

¿Cuál es la mejor práctica para Object.toString()? ¿Es primario para # 1 o # 2? ¿Existe una mejor práctica para el nombramiento de estos métodos?

Respuesta

13

¿Te formato a una dirección de la misma manera en un mensaje SMS y en una página HTML? ¿Lo formatearías de la misma manera en inglés, francés y japonés?

Si no, entonces tiene su respuesta: la presentación no pertenece al objeto, sino a la capa de presentación que muestra el objeto. A menos que el objeto esté compuesto específicamente para la capa de presentación, por ejemplo, si es una HtmlI18nedAddress, use toString para la depuración.

Considera Date vs SimpleDateFormat. Date contiene el estado y SimpleDateFormat devuelve varias representaciones.

+1

Si menciona SimpleDateFormat vs Date (o cualquier otro ejemplo relevante) marcaré esta respuesta como aceptada. – Gili

-1

Una cosa que puedes hacer es utilizar un indicador de depuración de cambiar esta situación como desee:

public String toString(boolean debug) { 
    if (debug) return debugStringVersion; 
    else return humanVersion; 
} 

public String toString() { 
    return toString(Util.DEBUG); 
} 

Por supuesto, esto supone que tiene una clase de utilidad de sebo con un indicador de depuración en el mismo.

+3

esto no tiene sentido para mí? ¿Cuál debería ser el uso de toString() en el código productivo si cambia su valor de retorno durante la depuración? – lweller

+0

@lweller. No siempre puedes hacer esto. Pero a veces puede ser muy útil. – jjnguy

3

Yo diría que el primero. El formato de los datos no debe estar codificado en la función ToString() del objeto.

Lo veo de esta manera: trato de hacer que mis datos de salida ToString() sean legibles mediante una función Parse (datos de cadena) correspondiente (si esa función existe o no no es importante). Entonces, en este caso, si desea un formato específico, escriba una función específica y deje las rutinas de volcado de datos genéricos en ToString().

0

Se podía leer en alguna propiedad de depuración que se configura dinámicamente .:

@Override 
public String toString() { 

    if(debug) { 
     return debugAddrString() 
    } 
    return normalAddrString(); 

} 
+0

¡Veo que me golpearon al golpe! –

+1

esto no tiene sentido para mí? ¿Cuál debería ser el uso de toString() en el código productivo si cambia su valor de retorno durante la depuración? – lweller

+0

Parece que emula una 'definición' de C – helpermethod

-1

El Javadoc dice:

En general, el método toString devuelve una cadena que "textualmente representa" este objeto El resultado debe ser una representación concisa pero informativa que sea fácil de leer para una persona .

entonces voy con 2.

+4

Sí, creo que no hay duda de que "representa textualmente" el objeto, pero la pregunta (en mi opinión) es "¿para qué?" Y creo que el objetivo principal es la depuración. –

0

ToString generalmente solo se debe utilizar para la información de depuración.Tenga en cuenta que está anulando un método en Object; ¿Es conceptualmente exacto tener una llamada de método en un retorno de referencia Object, una dirección legible para el ser humano? En algunos casos, dependiendo del proyecto, esto puede tener sentido, pero suena un poco extraño para mí. Implementaría un nuevo método.

Otra cosa a tener en cuenta es que la mayoría de los IDEs modernos usan el método ToString para imprimir información de depuración sobre los objetos al inspeccionarlos.

+0

IBTD. ¿Qué dice un 'StringBuilder' sobre tu primera oración? ¿Es su '.toString()' realmente solo para la depuración? – glglgl

Cuestiones relacionadas