Assists in implementing
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
appendSuper(String)
.
To append the
toString
from an object that is delegated
to (or any other object), use
appendToString(String)
.
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
ToStringStyle
passed into the constructor.
append
public ToStringBuilder append(Object object)
Append to the toString
an Object
value.
object
- the value to add to the toString
append
public ToStringBuilder append(Object[] array)
Append to the toString
an Object
array.
array
- the array to add to the toString
append
public ToStringBuilder append(String fieldName,
Object object)
Append to the toString
an Object
value.
fieldName
- the field nameobject
- the value to add to the toString
append
public ToStringBuilder append(String fieldName,
Object object,
boolean fullDetail)
Append to the toString
an Object
value.
fieldName
- the field nameobject
- the value to add to the toString
fullDetail
- true
for detail,
false
for summary info
append
public ToStringBuilder append(String fieldName,
Object[] array)
Append to the toString
an Object
array.
fieldName
- the field namearray
- the array to add to the toString
append
public ToStringBuilder append(String fieldName,
Object[] array,
boolean fullDetail)
Append to the
toString
an
Object
array.
A boolean parameter controls the level of detail to show.
Setting
true
will output the array in full. Setting
false
will output a summary, typically the size of
the array.
fieldName
- the field namearray
- the array to add to the toString
fullDetail
- true
for detail, false
for summary info
append
public ToStringBuilder append(String fieldName,
boolean value)
Append to the toString
a boolean
value.
fieldName
- the field namevalue
- the value to add to the toString
append
public ToStringBuilder append(String fieldName,
boolean[] array)
Append to the toString
a boolean
array.
fieldName
- the field namearray
- the array to add to the hashCode
append
public ToStringBuilder append(String fieldName,
boolean[] array,
boolean fullDetail)
Append to the
toString
a
boolean
array.
A boolean parameter controls the level of detail to show.
Setting
true
will output the array in full. Setting
false
will output a summary, typically the size of
the array.
fieldName
- the field namearray
- the array to add to the toString
fullDetail
- true
for detail, false
for summary info
append
public ToStringBuilder append(String fieldName,
byte value)
Append to the toString
an byte
value.
fieldName
- the field namevalue
- the value to add to the toString
append
public ToStringBuilder append(String fieldName,
byte[] array)
Append to the toString
a byte
array.
fieldName
- the field namearray
- the array to add to the toString
append
public ToStringBuilder append(String fieldName,
byte[] array,
boolean fullDetail)
Append to the
toString
a
byte
array.
A boolean parameter controls the level of detail to show.
Setting
true
will output the array in full. Setting
false
will output a summary, typically the size of
the array.
fieldName
- the field namearray
- the array to add to the toString
fullDetail
- true
for detail, false
for summary info
append
public ToStringBuilder append(String fieldName,
char value)
Append to the toString
a char
value.
fieldName
- the field namevalue
- the value to add to the toString
append
public ToStringBuilder append(String fieldName,
char[] array)
Append to the toString
a char
array.
fieldName
- the field namearray
- the array to add to the toString
append
public ToStringBuilder append(String fieldName,
char[] array,
boolean fullDetail)
Append to the
toString
a
char
array.
A boolean parameter controls the level of detail to show.
Setting
true
will output the array in full. Setting
false
will output a summary, typically the size of
the array.
fieldName
- the field namearray
- the array to add to the toString
fullDetail
- true
for detail, false
for summary info
append
public ToStringBuilder append(String fieldName,
double value)
Append to the toString
a double
value.
fieldName
- the field namevalue
- the value to add to the toString
append
public ToStringBuilder append(String fieldName,
double[] array)
Append to the toString
a double
array.
fieldName
- the field namearray
- the array to add to the toString
append
public ToStringBuilder append(String fieldName,
double[] array,
boolean fullDetail)
Append to the
toString
a
double
array.
A boolean parameter controls the level of detail to show.
Setting
true
will output the array in full. Setting
false
will output a summary, typically the size of
the array.
fieldName
- the field namearray
- the array to add to the toString
fullDetail
- true
for detail, false
for summary info
append
public ToStringBuilder append(String fieldName,
float value)
Append to the toString
an float
value.
fieldName
- the field namevalue
- the value to add to the toString
append
public ToStringBuilder append(String fieldName,
float[] array)
Append to the toString
a float
array.
fieldName
- the field namearray
- the array to add to the toString
append
public ToStringBuilder append(String fieldName,
float[] array,
boolean fullDetail)
Append to the
toString
a
float
array.
A boolean parameter controls the level of detail to show.
Setting
true
will output the array in full. Setting
false
will output a summary, typically the size of
the array.
fieldName
- the field namearray
- the array to add to the toString
fullDetail
- true
for detail, false
for summary info
append
public ToStringBuilder append(String fieldName,
int value)
Append to the toString
an int
value.
fieldName
- the field namevalue
- the value to add to the toString
append
public ToStringBuilder append(String fieldName,
int[] array)
Append to the toString
an int
array.
fieldName
- the field namearray
- the array to add to the toString
append
public ToStringBuilder append(String fieldName,
int[] array,
boolean fullDetail)
Append to the
toString
an
int
array.
A boolean parameter controls the level of detail to show.
Setting
true
will output the array in full. Setting
false
will output a summary, typically the size of
the array.
fieldName
- the field namearray
- the array to add to the toString
fullDetail
- true
for detail, false
for summary info
append
public ToStringBuilder append(String fieldName,
long value)
Append to the toString
a long
value.
fieldName
- the field namevalue
- the value to add to the toString
append
public ToStringBuilder append(String fieldName,
long[] array)
Append to the toString
a long
array.
fieldName
- the field namearray
- the array to add to the toString
append
public ToStringBuilder append(String fieldName,
long[] array,
boolean fullDetail)
Append to the
toString
a
long
array.
A boolean parameter controls the level of detail to show.
Setting
true
will output the array in full. Setting
false
will output a summary, typically the size of
the array.
fieldName
- the field namearray
- the array to add to the toString
fullDetail
- true
for detail, false
for summary info
append
public ToStringBuilder append(String fieldName,
short value)
Append to the toString
an short
value.
fieldName
- the field namevalue
- the value to add to the toString
append
public ToStringBuilder append(String fieldName,
short[] array)
Append to the toString
a short
array.
fieldName
- the field namearray
- the array to add to the toString
append
public ToStringBuilder append(String fieldName,
short[] array,
boolean fullDetail)
Append to the
toString
a
short
array.
A boolean parameter controls the level of detail to show.
Setting
true
will output the array in full. Setting
false
will output a summary, typically the size of
the array.
fieldName
- the field namearray
- the array to add to the toString
fullDetail
- true
for detail, false
for summary info
append
public ToStringBuilder append(boolean value)
Append to the toString
a boolean
value.
value
- the value to add to the toString
append
public ToStringBuilder append(boolean[] array)
Append to the toString
a boolean
array.
array
- the array to add to the toString
append
public ToStringBuilder append(byte value)
Append to the toString
a byte
value.
value
- the value to add to the toString
append
public ToStringBuilder append(byte[] array)
Append to the toString
a byte
array.
array
- the array to add to the toString
append
public ToStringBuilder append(char value)
Append to the toString
a char
value.
value
- the value to add to the toString
append
public ToStringBuilder append(char[] array)
Append to the toString
a char
array.
array
- the array to add to the toString
append
public ToStringBuilder append(double value)
Append to the toString
a double
value.
value
- the value to add to the toString
append
public ToStringBuilder append(double[] array)
Append to the toString
a double
array.
array
- the array to add to the toString
append
public ToStringBuilder append(float value)
Append to the toString
a float
value.
value
- the value to add to the toString
append
public ToStringBuilder append(float[] array)
Append to the toString
a float
array.
array
- the array to add to the toString
append
public ToStringBuilder append(int value)
Append to the toString
an int
value.
value
- the value to add to the toString
append
public ToStringBuilder append(int[] array)
Append to the toString
an int
array.
array
- the array to add to the toString
append
public ToStringBuilder append(long value)
Append to the toString
a long
value.
value
- the value to add to the toString
append
public ToStringBuilder append(long[] array)
Append to the toString
a long
array.
array
- the array to add to the toString
append
public ToStringBuilder append(short value)
Append to the toString
a short
value.
value
- the value to add to the toString
append
public ToStringBuilder append(short[] array)
Append to the toString
a short
array.
array
- the array to add to the toString
appendAsObjectToString
public ToStringBuilder appendAsObjectToString(Object object)
Appends with the same format as the default Object toString()
method. Appends the class name followed by
System.identityHashCode(java.lang.Object)
.
object
- the Object
whose class name and id to output
appendSuper
public ToStringBuilder appendSuper(String superToString)
Append the
toString
from the superclass.
This method assumes that the superclass uses the same
ToStringStyle
as this one.
If
superToString
is
null
, no change is made.
superToString
- the result of super.toString()
appendToString
public ToStringBuilder appendToString(String toString)
Append the
toString
from another object.
This method is useful where a class delegates most of the implementation of
its properties to another class. You can then call
toString()
on
the other class and pass the result into this method.
private AnotherObject delegate;
private String fieldInThisClass;
public String toString() {
return new ToStringBuilder(this).
appendToString(delegate.toString()).
append(fieldInThisClass).
toString();
}
This method assumes that the other object uses the same
ToStringStyle
as this one.
If the
toString
is
null
, no change is made.
toString
- the result of toString()
on another object
getDefaultStyle
public static ToStringStyle getDefaultStyle()
Gets the default
ToStringStyle
to use.
This could allow the
ToStringStyle
to be
controlled for an entire application with one call.
This might be used to have a verbose
ToStringStyle
during development and a compact
ToStringStyle
in production.
- the default
ToStringStyle
getObject
public Object getObject()
Returns the Object
being output.
getStringBuffer
public StringBuffer getStringBuffer()
Gets the StringBuffer
being populated.
- the
StringBuffer
being populated
getStyle
public ToStringStyle getStyle()
Gets the ToStringStyle
being used.
- the
ToStringStyle
being used
reflectionToString
public static String reflectionToString(Object object)
Forwards to ReflectionToStringBuilder
.
reflectionToString
public static String reflectionToString(Object object,
ToStringStyle style)
Forwards to ReflectionToStringBuilder
.
reflectionToString
public static String reflectionToString(Object object,
ToStringStyle style,
boolean outputTransients)
Forwards to ReflectionToStringBuilder
.
reflectionToString
public static String reflectionToString(Object object,
ToStringStyle style,
boolean outputTransients,
Class reflectUpToClass)
Forwards to ReflectionToStringBuilder
.
setDefaultStyle
public static void setDefaultStyle(ToStringStyle style)
Sets the default ToStringStyle
to use.
style
- the default ToStringStyle
toString
public String toString()
Returns the built
toString
.
This method appends the end of data indicator, and can only be called once.
Use
getStringBuffer()
to get the current string state.
If the object is
null
, return the style's
nullText