public static <T> String toString(
            T object, ToStringStyle style, boolean outputTransients,
            boolean outputStatics, Class<? super T> reflectUpToClass) {
        return new ReflectionToStringBuilder(object, style, null, reflectUpToClass, outputTransients, outputStatics)
                .toString();
    }
<p>
Builds a <code>toString</code> value through reflection.
</p>

<p>
It uses <code>AccessibleObject.setAccessible</code> 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.
</p>

<p>
If the <code>outputTransients</code> is <code>true</code>, transient fields will be output, otherwise they
are ignored, as they are likely derived fields, and not part of the value of the Object.
</p>

<p>
If the <code>outputStatics</code> is <code>true</code>, static fields will be output, otherwise they are
ignored.
</p>

<p>
Superclass fields will be appended up to and including the specified superclass. A null superclass is treated as
<code>java.lang.Object</code>.
</p>

<p>
If the style is <code>null</code>, the default <code>ToStringStyle</code> is used.
</p>

@param <T>
           the type of the object
@param object
           the Object to be output
@param style
           the style of the <code>toString</code> to create, may be <code>null</code>
@param outputTransients
           whether to include transient fields
@param outputStatics
           whether to include static fields
@param reflectUpToClass
           the superclass to reflect up to (inclusive), may be <code>null</code>
@return the String result
@throws IllegalArgumentException
            if the Object is <code>null</code>
@since 2.1
android/android_framework/base/src/main/java/lang3/builder/ReflectionToStringBuilder.java