Assists in implementing {@link Object#toString()} methods.
This class enables a good and consistent toString()
to be built for any class or object. This class aims to simplify the process by:
- allowing field names
- handling all types consistently
- handling nulls consistently
- outputting arrays and multi-dimensional arrays
- enabling the detail level to be controlled for Objects and Collections
- handling class hierarchies
To use this class write code as follows:
public class Person { String name; int age; boolean isSmoker; ... public String toString() { return new ToStringBuilder(this). append("name", name). append("age", age). append("smoker", smoker). toString(); } }
This will produce a toString of the format: Person@7f54[name=Stephen,age=29,smoker=false]
To add the superclass toString
, use {@link #appendSuper}. To append the toString
from an object that is delegated to (or any other object), use {@link #appendToString}.
Alternatively, there is a method that uses reflection to determine the fields to test. Because these fields are usually private, the method, reflectionToString
, uses AccessibleObject.setAccessible
to change the visibility of the fields. This will fail under a security manager, unless the appropriate permissions are set up correctly. It is also slower than testing explicitly.
A typical invocation for this method would look like:
public String toString() { return ToStringBuilder.reflectionToString(this); }
You can also use the builder to debug 3rd party objects:
System.out.println("An object: " + ToStringBuilder.reflectionToString(anObject));
The exact format of the toString
is determined by the {@link ToStringStyle} passed into the constructor.
@author Stephen Colebourne
@author Gary Gregory
@author Pete Gieser
@since 1.0
@version $Id: ToStringBuilder.java 161243 2005-04-14 04:30:28Z ggregory $