public class ReflectionToStringBuilder extends ToStringBuilder
Assists in implementing Object.toString()
methods using reflection.
This class uses reflection to determine the fields to append. Because these fields are usually private, the class
uses AccessibleObject.setAccessible(java.lang.reflect.AccessibleObject[], boolean)
to
change the visibility of the fields. This will fail under a security manager, unless the appropriate permissions are
set up correctly.
Using reflection to access (private) fields circumvents any synchronization protection guarding access to these fields. If a toString method cannot safely read a field, you should exclude it from the toString method, or use synchronization consistent with the class' lock management around the invocation of the method. Take special care to exclude non-thread-safe collection classes, because these classes may throw ConcurrentModificationException if modified while the toString method is executing.
A typical invocation for this method would look like:
public String toString() { return ReflectionToStringBuilder.toString(this); }
You can also use the builder to debug 3rd party objects:
System.out.println("An object: " + ReflectionToStringBuilder.toString(anObject));
A subclass can control field output by overriding the methods:
For example, this method does not include the password
field in the returned String
:
public String toString() { return (new ReflectionToStringBuilder(this) { protected boolean accept(Field f) { return super.accept(f) && !f.getName().equals("password"); } }).toString(); }
Alternatively the ToStringExclude
annotation can be used to exclude fields from being incorporated in the
result.
It is also possible to use the ToStringSummary
annotation to output the summary information instead of the
detailed information of a field.
The exact format of the toString
is determined by the ToStringStyle
passed into the constructor.
Note: the default ToStringStyle
will only do a "shallow" formatting, i.e. composed objects are not
further traversed. To get "deep" formatting, use an instance of RecursiveToStringStyle
.
Modifier and Type | Field and Description |
---|---|
protected String[] |
excludeFieldNames
Which field names to exclude from output.
|
Constructor and Description |
---|
ReflectionToStringBuilder(Object object)
Constructor.
|
ReflectionToStringBuilder(Object object,
ToStringStyle style)
Constructor.
|
ReflectionToStringBuilder(Object object,
ToStringStyle style,
StringBuffer buffer)
Constructor.
|
ReflectionToStringBuilder(T object,
ToStringStyle style,
StringBuffer buffer,
Class<? super T> reflectUpToClass,
boolean outputTransients,
boolean outputStatics)
Constructor.
|
ReflectionToStringBuilder(T object,
ToStringStyle style,
StringBuffer buffer,
Class<? super T> reflectUpToClass,
boolean outputTransients,
boolean outputStatics,
boolean excludeNullValues)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
protected boolean |
accept(Field field)
Returns whether or not to append the given
Field . |
protected void |
appendFieldsIn(Class<?> clazz)
Appends the fields and values defined by the given object of the given Class.
|
String[] |
getExcludeFieldNames() |
Class<?> |
getUpToClass()
Gets the last super class to stop appending fields for.
|
protected Object |
getValue(Field field)
Calls
java.lang.reflect.Field.get(Object) . |
boolean |
isAppendStatics()
Gets whether or not to append static fields.
|
boolean |
isAppendTransients()
Gets whether or not to append transient fields.
|
boolean |
isExcludeNullValues()
Gets whether or not to append fields whose values are null.
|
ReflectionToStringBuilder |
reflectionAppendArray(Object array)
Append to the
toString an Object array. |
void |
setAppendStatics(boolean appendStatics)
Sets whether or not to append static fields.
|
void |
setAppendTransients(boolean appendTransients)
Sets whether or not to append transient fields.
|
ReflectionToStringBuilder |
setExcludeFieldNames(String... excludeFieldNamesParam)
Sets the field names to exclude.
|
void |
setExcludeNullValues(boolean excludeNullValues)
Sets whether or not to append fields whose values are null.
|
void |
setUpToClass(Class<?> clazz)
Sets the last super class to stop appending fields for.
|
String |
toString()
Gets the String built by this builder.
|
static String |
toString(Object object)
Builds a
toString value using the default ToStringStyle through reflection. |
static String |
toString(Object object,
ToStringStyle style)
Builds a
toString value through reflection. |
static String |
toString(Object object,
ToStringStyle style,
boolean outputTransients)
Builds a
toString value through reflection. |
static String |
toString(Object object,
ToStringStyle style,
boolean outputTransients,
boolean outputStatics)
Builds a
toString value through reflection. |
static <T> String |
toString(T object,
ToStringStyle style,
boolean outputTransients,
boolean outputStatics,
boolean excludeNullValues,
Class<? super T> reflectUpToClass)
Builds a
toString value through reflection. |
static <T> String |
toString(T object,
ToStringStyle style,
boolean outputTransients,
boolean outputStatics,
Class<? super T> reflectUpToClass)
Builds a
toString value through reflection. |
static String |
toStringExclude(Object object,
Collection<String> excludeFieldNames)
Builds a String for a toString method excluding the given field names.
|
static String |
toStringExclude(Object object,
String... excludeFieldNames)
Builds a String for a toString method excluding the given field names.
|
append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, append, appendAsObjectToString, appendSuper, appendToString, build, getDefaultStyle, getObject, getStringBuffer, getStyle, reflectionToString, reflectionToString, reflectionToString, reflectionToString, setDefaultStyle
protected String[] excludeFieldNames
"password"
.public ReflectionToStringBuilder(Object object)
Constructor.
This constructor outputs using the default style set with setDefaultStyle
.
object
- the Object to build a toString
for, must not be null
IllegalArgumentException
- if the Object passed in is null
public ReflectionToStringBuilder(Object object, ToStringStyle style)
Constructor.
If the style is null
, the default style is used.
object
- the Object to build a toString
for, must not be null
style
- the style of the toString
to create, may be null
IllegalArgumentException
- if the Object passed in is null
public ReflectionToStringBuilder(Object object, ToStringStyle style, StringBuffer buffer)
Constructor.
If the style is null
, the default style is used.
If the buffer is null
, a new one is created.
object
- the Object to build a toString
forstyle
- the style of the toString
to create, may be null
buffer
- the StringBuffer
to populate, may be null
IllegalArgumentException
- if the Object passed in is null
public ReflectionToStringBuilder(T object, ToStringStyle style, StringBuffer buffer, Class<? super T> reflectUpToClass, boolean outputTransients, boolean outputStatics)
T
- the type of the objectobject
- the Object to build a toString
forstyle
- the style of the toString
to create, may be null
buffer
- the StringBuffer
to populate, may be null
reflectUpToClass
- the superclass to reflect up to (inclusive), may be null
outputTransients
- whether to include transient fieldsoutputStatics
- whether to include static fieldspublic ReflectionToStringBuilder(T object, ToStringStyle style, StringBuffer buffer, Class<? super T> reflectUpToClass, boolean outputTransients, boolean outputStatics, boolean excludeNullValues)
T
- the type of the objectobject
- the Object to build a toString
forstyle
- the style of the toString
to create, may be null
buffer
- the StringBuffer
to populate, may be null
reflectUpToClass
- the superclass to reflect up to (inclusive), may be null
outputTransients
- whether to include transient fieldsoutputStatics
- whether to include static fieldsexcludeNullValues
- whether to exclude fields who value is nullpublic static String toString(Object object)
Builds a toString
value using the default ToStringStyle
through reflection.
It uses AccessibleObject.setAccessible
to gain access to private fields. This means that it will
throw a security exception if run under a security manager, if the permissions are not set up correctly. It is
also not as efficient as testing explicitly.
Transient members will be not be included, as they are likely derived. Static fields will not be included. Superclass fields will be appended.
object
- the Object to be outputIllegalArgumentException
- if the Object is null
ToStringExclude
,
ToStringSummary
public static String toString(Object object, ToStringStyle style)
Builds a toString
value through reflection.
It uses AccessibleObject.setAccessible
to gain access to private fields. This means that it will
throw a security exception if run under a security manager, if the permissions are not set up correctly. It is
also not as efficient as testing explicitly.
Transient members will be not be included, as they are likely derived. Static fields will not be included. Superclass fields will be appended.
If the style is null
, the default ToStringStyle
is used.
object
- the Object to be outputstyle
- the style of the toString
to create, may be null
IllegalArgumentException
- if the Object or ToStringStyle
is null
ToStringExclude
,
ToStringSummary
public static String toString(Object object, ToStringStyle style, boolean outputTransients)
Builds a toString
value through reflection.
It uses AccessibleObject.setAccessible
to gain access to private fields. This means that it will
throw a security exception if run under a security manager, if the permissions are not set up correctly. It is
also not as efficient as testing explicitly.
If the outputTransients
is true
, transient members will be output, otherwise they
are ignored, as they are likely derived fields, and not part of the value of the Object.
Static fields will not be included. Superclass fields will be appended.
If the style is null
, the default ToStringStyle
is used.
object
- the Object to be outputstyle
- the style of the toString
to create, may be null
outputTransients
- whether to include transient fieldsIllegalArgumentException
- if the Object is null
ToStringExclude
,
ToStringSummary
public static String toString(Object object, ToStringStyle style, boolean outputTransients, boolean outputStatics)
Builds a toString
value through reflection.
It uses AccessibleObject.setAccessible
to gain access to private fields. This means that it will
throw a security exception if run under a security manager, if the permissions are not set up correctly. It is
also not as efficient as testing explicitly.
If the outputTransients
is true
, transient fields will be output, otherwise they
are ignored, as they are likely derived fields, and not part of the value of the Object.
If the outputStatics
is true
, static fields will be output, otherwise they are
ignored.
Static fields will not be included. Superclass fields will be appended.
If the style is null
, the default ToStringStyle
is used.
object
- the Object to be outputstyle
- the style of the toString
to create, may be null
outputTransients
- whether to include transient fieldsoutputStatics
- whether to include static fieldsIllegalArgumentException
- if the Object is null
ToStringExclude
,
ToStringSummary
public static <T> String toString(T object, ToStringStyle style, boolean outputTransients, boolean outputStatics, Class<? super T> reflectUpToClass)
Builds a toString
value through reflection.
It uses AccessibleObject.setAccessible
to gain access to private fields. This means that it will
throw a security exception if run under a security manager, if the permissions are not set up correctly. It is
also not as efficient as testing explicitly.
If the outputTransients
is true
, transient fields will be output, otherwise they
are ignored, as they are likely derived fields, and not part of the value of the Object.
If the outputStatics
is true
, static fields will be output, otherwise they are
ignored.
Superclass fields will be appended up to and including the specified superclass. A null superclass is treated as
java.lang.Object
.
If the style is null
, the default ToStringStyle
is used.
T
- the type of the objectobject
- the Object to be outputstyle
- the style of the toString
to create, may be null
outputTransients
- whether to include transient fieldsoutputStatics
- whether to include static fieldsreflectUpToClass
- the superclass to reflect up to (inclusive), may be null
IllegalArgumentException
- if the Object is null
ToStringExclude
,
ToStringSummary
public static <T> String toString(T object, ToStringStyle style, boolean outputTransients, boolean outputStatics, boolean excludeNullValues, Class<? super T> reflectUpToClass)
Builds a toString
value through reflection.
It uses AccessibleObject.setAccessible
to gain access to private fields. This means that it will
throw a security exception if run under a security manager, if the permissions are not set up correctly. It is
also not as efficient as testing explicitly.
If the outputTransients
is true
, transient fields will be output, otherwise they
are ignored, as they are likely derived fields, and not part of the value of the Object.
If the outputStatics
is true
, static fields will be output, otherwise they are
ignored.
Superclass fields will be appended up to and including the specified superclass. A null superclass is treated as
java.lang.Object
.
If the style is null
, the default ToStringStyle
is used.
T
- the type of the objectobject
- the Object to be outputstyle
- the style of the toString
to create, may be null
outputTransients
- whether to include transient fieldsoutputStatics
- whether to include static fieldsexcludeNullValues
- whether to exclude fields whose values are nullreflectUpToClass
- the superclass to reflect up to (inclusive), may be null
IllegalArgumentException
- if the Object is null
ToStringExclude
,
ToStringSummary
public static String toStringExclude(Object object, Collection<String> excludeFieldNames)
object
- The object to "toString".excludeFieldNames
- The field names to exclude. Null excludes nothing.public static String toStringExclude(Object object, String... excludeFieldNames)
object
- The object to "toString".excludeFieldNames
- The field names to excludeprotected boolean accept(Field field)
Field
.
isAppendTransients()
returns true
.
isAppendStatics()
returns true
.
field
- The Field to test.Field
.protected void appendFieldsIn(Class<?> clazz)
Appends the fields and values defined by the given object of the given Class.
If a cycle is detected as an object is "toString()'ed", such an object is rendered as if
Object.toString()
had been called and not implemented by the object.
clazz
- The class of object parameterpublic String[] getExcludeFieldNames()
public Class<?> getUpToClass()
Gets the last super class to stop appending fields for.
protected Object getValue(Field field) throws IllegalAccessException
Calls java.lang.reflect.Field.get(Object)
.
field
- The Field to query.IllegalArgumentException
- see Field.get(Object)
IllegalAccessException
- see Field.get(Object)
Field.get(Object)
public boolean isAppendStatics()
Gets whether or not to append static fields.
public boolean isAppendTransients()
Gets whether or not to append transient fields.
public boolean isExcludeNullValues()
Gets whether or not to append fields whose values are null.
public ReflectionToStringBuilder reflectionAppendArray(Object array)
Append to the toString
an Object
array.
array
- the array to add to the toString
public void setAppendStatics(boolean appendStatics)
Sets whether or not to append static fields.
appendStatics
- Whether or not to append static fields.public void setAppendTransients(boolean appendTransients)
Sets whether or not to append transient fields.
appendTransients
- Whether or not to append transient fields.public void setExcludeNullValues(boolean excludeNullValues)
Sets whether or not to append fields whose values are null.
excludeNullValues
- Whether or not to append fields whose values are null.public ReflectionToStringBuilder setExcludeFieldNames(String... excludeFieldNamesParam)
excludeFieldNamesParam
- The excludeFieldNames to excluding from toString or null
.this
public void setUpToClass(Class<?> clazz)
Sets the last super class to stop appending fields for.
clazz
- The last super class to stop appending fields for.public String toString()
Gets the String built by this builder.
toString
in class ToStringBuilder
Copyright © 2001–2020 The Apache Software Foundation. All rights reserved.