Recipe 9.1 Printing Objects: Formatting with toString( )


Problem

You want your objects to have a useful default format.

Solution

Override the toString( ) method inherited from java.lang.Object.

Discussion

Whenever you pass an object to System.out.println( ) or any equivalent method, or involve it in string concatenation, Java automatically calls its toString( ) method. Java "knows" that every object has a toString( ) method since java.lang.Object has one and all classes are ultimately subclasses of Object. The default implementation, in java.lang.Object , is neither pretty nor interesting: it just prints the class name, an @ sign, and the object's hashCode( ) value (see Recipe 9.3). For example, if you run this code:

/* Demonstrate toString( ) without an override */ public class ToStringWithout {     int x, y;     /** Simple constructor */     public ToStringWithout(int anX, int aY) {         x = anX; y = aY;     }     /** Main just creates and prints an object */     public static void main(String[] args) {          System.out.println(new ToStringWithout(42, 86));     } }

you might see this uninformative output:

ToStringWithout@990c747b

To make it print better, you should provide an implementation of toString( ) that prints the class name and some of the important states in all but the most trivial classes. This gives you formatting control in println( ), in debuggers, and anywhere your objects get referred to in a String context. Here is the previous program rewritten with a toString( ) method:

/* Demonstrate toString( ) with an override */ public class ToStringWith {     int x, y;     /** Simple constructor */     public ToStringWith(int anX, int aY) {         x = anX; y = aY;     }     /** Override toString */     public String toString( ) {         return "ToStringWith[" + x + "," + y + "]";     }     /** Main just creates and prints an object */     public static void main(String[] args) {          System.out.println(new ToStringWith(42, 86));     } }

This version produces the more useful output:

ToStringWith[42,86]



Java Cookbook
Java Cookbook, Second Edition
ISBN: 0596007019
EAN: 2147483647
Year: 2003
Pages: 409
Authors: Ian F Darwin

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net