Class CompareToBuilder
- java.lang.Object
 - 
- org.apache.commons.lang.builder.CompareToBuilder
 
 
- 
public class CompareToBuilder extends java.lang.ObjectAssists in implementingComparable.compareTo(Object)methods. It is consistent withequals(Object)andhashcode()built withEqualsBuilderandHashCodeBuilder.Two Objects that compare equal using
equals(Object)should normally also compare equal usingcompareTo(Object).All relevant fields should be included in the calculation of the comparison. Derived fields may be ignored. The same fields, in the same order, should be used in both
compareTo(Object)andequals(Object).To use this class write code as follows:
public class MyClass { String field1; int field2; boolean field3; ... public int compareTo(Object o) { MyClass myClass = (MyClass) o; return new CompareToBuilder() .appendSuper(super.compareTo(o) .append(this.field1, myClass.field1) .append(this.field2, myClass.field2) .append(this.field3, myClass.field3) .toComparison(); } }Alternatively, there are
reflectionComparemethods that use reflection to determine the fields to append. Because fields can be private,reflectionCompareusesAccessibleObject.setAccessible(boolean)to bypass normal access control checks. This will fail under a security manager, unless the appropriate permissions are set up correctly. It is also slower than appending explicitly.A typical implementation of
compareTo(Object)usingreflectionComparelooks like:public int compareTo(Object o) { return CompareToBuilder.reflectionCompare(this, o); }- Since:
 - 1.0
 - See Also:
 Comparable,Object.equals(Object),Object.hashCode(),EqualsBuilder,HashCodeBuilder
 
- 
- 
Constructor Summary
Constructors Constructor Description CompareToBuilder()Constructor for CompareToBuilder. 
- 
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description CompareToBuilderappend(boolean[] lhs, boolean[] rhs)Appends to thebuilderthe deep comparison of twobooleanarrays.CompareToBuilderappend(boolean lhs, boolean rhs)Appends to thebuilderthe comparison of twobooleanss.CompareToBuilderappend(byte[] lhs, byte[] rhs)Appends to thebuilderthe deep comparison of twobytearrays.CompareToBuilderappend(byte lhs, byte rhs)Appends to thebuilderthe comparison of twobytes.CompareToBuilderappend(char[] lhs, char[] rhs)Appends to thebuilderthe deep comparison of twochararrays.CompareToBuilderappend(char lhs, char rhs)Appends to thebuilderthe comparison of twochars.CompareToBuilderappend(double[] lhs, double[] rhs)Appends to thebuilderthe deep comparison of twodoublearrays.CompareToBuilderappend(double lhs, double rhs)Appends to thebuilderthe comparison of twodoubles.CompareToBuilderappend(float[] lhs, float[] rhs)Appends to thebuilderthe deep comparison of twofloatarrays.CompareToBuilderappend(float lhs, float rhs)Appends to thebuilderthe comparison of twofloats.CompareToBuilderappend(int[] lhs, int[] rhs)Appends to thebuilderthe deep comparison of twointarrays.CompareToBuilderappend(int lhs, int rhs)Appends to thebuilderthe comparison of twoints.CompareToBuilderappend(long[] lhs, long[] rhs)Appends to thebuilderthe deep comparison of twolongarrays.CompareToBuilderappend(long lhs, long rhs)Appends to thebuilderthe comparison of twolongs.CompareToBuilderappend(short[] lhs, short[] rhs)Appends to thebuilderthe deep comparison of twoshortarrays.CompareToBuilderappend(short lhs, short rhs)Appends to thebuilderthe comparison of twoshorts.CompareToBuilderappend(java.lang.Object[] lhs, java.lang.Object[] rhs)Appends to thebuilderthe deep comparison of twoObjectarrays.CompareToBuilderappend(java.lang.Object[] lhs, java.lang.Object[] rhs, java.util.Comparator comparator)Appends to thebuilderthe deep comparison of twoObjectarrays.CompareToBuilderappend(java.lang.Object lhs, java.lang.Object rhs)Appends to thebuilderthe comparison of twoObjects.CompareToBuilderappend(java.lang.Object lhs, java.lang.Object rhs, java.util.Comparator comparator)Appends to thebuilderthe comparison of twoObjects.CompareToBuilderappendSuper(int superCompareTo)Appends to thebuilderthecompareTo(Object)result of the superclass.static intreflectionCompare(java.lang.Object lhs, java.lang.Object rhs)Compares twoObjects via reflection.static intreflectionCompare(java.lang.Object lhs, java.lang.Object rhs, boolean compareTransients)Compares twoObjects via reflection.static intreflectionCompare(java.lang.Object lhs, java.lang.Object rhs, boolean compareTransients, java.lang.Class reflectUpToClass)Compares twoObjects via reflection.static intreflectionCompare(java.lang.Object lhs, java.lang.Object rhs, boolean compareTransients, java.lang.Class reflectUpToClass, java.lang.String[] excludeFields)Compares twoObjects via reflection.static intreflectionCompare(java.lang.Object lhs, java.lang.Object rhs, java.lang.String[] excludeFields)Compares twoObjects via reflection.static intreflectionCompare(java.lang.Object lhs, java.lang.Object rhs, java.util.Collection excludeFields)Compares twoObjects via reflection.inttoComparison()Returns a negative integer, a positive integer, or zero as thebuilderhas judged the "left-hand" side as less than, greater than, or equal to the "right-hand" side. 
 - 
 
- 
- 
Constructor Detail
- 
CompareToBuilder
public CompareToBuilder()
Constructor for CompareToBuilder.
Starts off assuming that the objects are equal. Multiple calls are then made to the various append methods, followed by a call to
toComparison()to get the result. 
 - 
 
- 
Method Detail
- 
reflectionCompare
public static int reflectionCompare(java.lang.Object lhs, java.lang.Object rhs)Compares two
Objects via reflection.Fields can be private, thus
AccessibleObject.setAccessibleis used to bypass normal access control checks. This will fail under a security manager unless the appropriate permissions are set.- Static fields will not be compared
 - Transient members will be not be compared, as they are likely derived fields
 - Superclass fields will be compared
 
If both
lhsandrhsarenull, they are considered equal.- Parameters:
 lhs- left-hand objectrhs- right-hand object- Returns:
 - a negative integer, zero, or a positive integer as 
lhsis less than, equal to, or greater thanrhs - Throws:
 java.lang.NullPointerException- if either (but not both) parameters arenulljava.lang.ClassCastException- ifrhsis not assignment-compatible withlhs
 
- 
reflectionCompare
public static int reflectionCompare(java.lang.Object lhs, java.lang.Object rhs, boolean compareTransients)Compares two
Objects via reflection.Fields can be private, thus
AccessibleObject.setAccessibleis used to bypass normal access control checks. This will fail under a security manager unless the appropriate permissions are set.- Static fields will not be compared
 - If 
compareTransientsistrue, compares transient members. Otherwise ignores them, as they are likely derived fields. - Superclass fields will be compared
 
If both
lhsandrhsarenull, they are considered equal.- Parameters:
 lhs- left-hand objectrhs- right-hand objectcompareTransients- whether to compare transient fields- Returns:
 - a negative integer, zero, or a positive integer as 
lhsis less than, equal to, or greater thanrhs - Throws:
 java.lang.NullPointerException- if eitherlhsorrhs(but not both) isnulljava.lang.ClassCastException- ifrhsis not assignment-compatible withlhs
 
- 
reflectionCompare
public static int reflectionCompare(java.lang.Object lhs, java.lang.Object rhs, java.util.Collection excludeFields)Compares two
Objects via reflection.Fields can be private, thus
AccessibleObject.setAccessibleis used to bypass normal access control checks. This will fail under a security manager unless the appropriate permissions are set.- Static fields will not be compared
 - If 
compareTransientsistrue, compares transient members. Otherwise ignores them, as they are likely derived fields. - Superclass fields will be compared
 
If both
lhsandrhsarenull, they are considered equal.- Parameters:
 lhs- left-hand objectrhs- right-hand objectexcludeFields- Collection of String fields to exclude- Returns:
 - a negative integer, zero, or a positive integer as 
lhsis less than, equal to, or greater thanrhs - Throws:
 java.lang.NullPointerException- if eitherlhsorrhs(but not both) isnulljava.lang.ClassCastException- ifrhsis not assignment-compatible withlhs- Since:
 - 2.2
 
 
- 
reflectionCompare
public static int reflectionCompare(java.lang.Object lhs, java.lang.Object rhs, java.lang.String[] excludeFields)Compares two
Objects via reflection.Fields can be private, thus
AccessibleObject.setAccessibleis used to bypass normal access control checks. This will fail under a security manager unless the appropriate permissions are set.- Static fields will not be compared
 - If 
compareTransientsistrue, compares transient members. Otherwise ignores them, as they are likely derived fields. - Superclass fields will be compared
 
If both
lhsandrhsarenull, they are considered equal.- Parameters:
 lhs- left-hand objectrhs- right-hand objectexcludeFields- array of fields to exclude- Returns:
 - a negative integer, zero, or a positive integer as 
lhsis less than, equal to, or greater thanrhs - Throws:
 java.lang.NullPointerException- if eitherlhsorrhs(but not both) isnulljava.lang.ClassCastException- ifrhsis not assignment-compatible withlhs- Since:
 - 2.2
 
 
- 
reflectionCompare
public static int reflectionCompare(java.lang.Object lhs, java.lang.Object rhs, boolean compareTransients, java.lang.Class reflectUpToClass)Compares two
Objects via reflection.Fields can be private, thus
AccessibleObject.setAccessibleis used to bypass normal access control checks. This will fail under a security manager unless the appropriate permissions are set.- Static fields will not be compared
 - If the 
compareTransientsistrue, compares transient members. Otherwise ignores them, as they are likely derived fields. - Compares superclass fields up to and including 
reflectUpToClass. IfreflectUpToClassisnull, compares all superclass fields. 
If both
lhsandrhsarenull, they are considered equal.- Parameters:
 lhs- left-hand objectrhs- right-hand objectcompareTransients- whether to compare transient fieldsreflectUpToClass- last superclass for which fields are compared- Returns:
 - a negative integer, zero, or a positive integer as 
lhsis less than, equal to, or greater thanrhs - Throws:
 java.lang.NullPointerException- if eitherlhsorrhs(but not both) isnulljava.lang.ClassCastException- ifrhsis not assignment-compatible withlhs- Since:
 - 2.0
 
 
- 
reflectionCompare
public static int reflectionCompare(java.lang.Object lhs, java.lang.Object rhs, boolean compareTransients, java.lang.Class reflectUpToClass, java.lang.String[] excludeFields)Compares two
Objects via reflection.Fields can be private, thus
AccessibleObject.setAccessibleis used to bypass normal access control checks. This will fail under a security manager unless the appropriate permissions are set.- Static fields will not be compared
 - If the 
compareTransientsistrue, compares transient members. Otherwise ignores them, as they are likely derived fields. - Compares superclass fields up to and including 
reflectUpToClass. IfreflectUpToClassisnull, compares all superclass fields. 
If both
lhsandrhsarenull, they are considered equal.- Parameters:
 lhs- left-hand objectrhs- right-hand objectcompareTransients- whether to compare transient fieldsreflectUpToClass- last superclass for which fields are comparedexcludeFields- fields to exclude- Returns:
 - a negative integer, zero, or a positive integer as 
lhsis less than, equal to, or greater thanrhs - Throws:
 java.lang.NullPointerException- if eitherlhsorrhs(but not both) isnulljava.lang.ClassCastException- ifrhsis not assignment-compatible withlhs- Since:
 - 2.2
 
 
- 
appendSuper
public CompareToBuilder appendSuper(int superCompareTo)
Appends to the
builderthecompareTo(Object)result of the superclass.- Parameters:
 superCompareTo- result of callingsuper.compareTo(Object)- Returns:
 - this - used to chain append calls
 - Since:
 - 2.0
 
 
- 
append
public CompareToBuilder append(java.lang.Object lhs, java.lang.Object rhs)
Appends to the
builderthe comparison of twoObjects.- Check if 
lhs == rhs - Check if either 
lhsorrhsisnull, anullobject is less than a non-nullobject - Check the object contents
 
lhsmust either be an array or implementComparable.- Parameters:
 lhs- left-hand objectrhs- right-hand object- Returns:
 - this - used to chain append calls
 - Throws:
 java.lang.ClassCastException- ifrhsis not assignment-compatible withlhs
 - Check if 
 
- 
append
public CompareToBuilder append(java.lang.Object lhs, java.lang.Object rhs, java.util.Comparator comparator)
Appends to the
builderthe comparison of twoObjects.- Check if 
lhs == rhs - Check if either 
lhsorrhsisnull, anullobject is less than a non-nullobject - Check the object contents
 
If
lhsis an array, array comparison methods will be used. Otherwisecomparatorwill be used to compare the objects. Ifcomparatorisnull,lhsmust implementComparableinstead.- Parameters:
 lhs- left-hand objectrhs- right-hand objectcomparator-Comparatorused to compare the objects,nullmeans treat lhs asComparable- Returns:
 - this - used to chain append calls
 - Throws:
 java.lang.ClassCastException- ifrhsis not assignment-compatible withlhs- Since:
 - 2.0
 
 - Check if 
 
- 
append
public CompareToBuilder append(long lhs, long rhs)
Appends to thebuilderthe comparison of twolongs.- Parameters:
 lhs- left-hand valuerhs- right-hand value- Returns:
 - this - used to chain append calls
 
 
- 
append
public CompareToBuilder append(int lhs, int rhs)
Appends to thebuilderthe comparison of twoints.- Parameters:
 lhs- left-hand valuerhs- right-hand value- Returns:
 - this - used to chain append calls
 
 
- 
append
public CompareToBuilder append(short lhs, short rhs)
Appends to thebuilderthe comparison of twoshorts.- Parameters:
 lhs- left-hand valuerhs- right-hand value- Returns:
 - this - used to chain append calls
 
 
- 
append
public CompareToBuilder append(char lhs, char rhs)
Appends to thebuilderthe comparison of twochars.- Parameters:
 lhs- left-hand valuerhs- right-hand value- Returns:
 - this - used to chain append calls
 
 
- 
append
public CompareToBuilder append(byte lhs, byte rhs)
Appends to thebuilderthe comparison of twobytes.- Parameters:
 lhs- left-hand valuerhs- right-hand value- Returns:
 - this - used to chain append calls
 
 
- 
append
public CompareToBuilder append(double lhs, double rhs)
Appends to the
builderthe comparison of twodoubles.This handles NaNs, Infinities, and
-0.0.It is compatible with the hash code generated by
HashCodeBuilder.- Parameters:
 lhs- left-hand valuerhs- right-hand value- Returns:
 - this - used to chain append calls
 
 
- 
append
public CompareToBuilder append(float lhs, float rhs)
Appends to the
builderthe comparison of twofloats.This handles NaNs, Infinities, and
-0.0.It is compatible with the hash code generated by
HashCodeBuilder.- Parameters:
 lhs- left-hand valuerhs- right-hand value- Returns:
 - this - used to chain append calls
 
 
- 
append
public CompareToBuilder append(boolean lhs, boolean rhs)
Appends to thebuilderthe comparison of twobooleanss.- Parameters:
 lhs- left-hand valuerhs- right-hand value- Returns:
 - this - used to chain append calls
 
 
- 
append
public CompareToBuilder append(java.lang.Object[] lhs, java.lang.Object[] rhs)
Appends to the
builderthe deep comparison of twoObjectarrays.- Check if arrays are the same using 
== - Check if for 
null,nullis less than non-null - Check array length, a short length array is less than a long length array
 - Check array contents element by element using 
append(Object, Object, Comparator) 
This method will also will be called for the top level of multi-dimensional, ragged, and multi-typed arrays.
- Parameters:
 lhs- left-hand arrayrhs- right-hand array- Returns:
 - this - used to chain append calls
 - Throws:
 java.lang.ClassCastException- ifrhsis not assignment-compatible withlhs
 - Check if arrays are the same using 
 
- 
append
public CompareToBuilder append(java.lang.Object[] lhs, java.lang.Object[] rhs, java.util.Comparator comparator)
Appends to the
builderthe deep comparison of twoObjectarrays.- Check if arrays are the same using 
== - Check if for 
null,nullis less than non-null - Check array length, a short length array is less than a long length array
 - Check array contents element by element using 
append(Object, Object, Comparator) 
This method will also will be called for the top level of multi-dimensional, ragged, and multi-typed arrays.
- Parameters:
 lhs- left-hand arrayrhs- right-hand arraycomparator-Comparatorto use to compare the array elements,nullmeans to treatlhselements asComparable.- Returns:
 - this - used to chain append calls
 - Throws:
 java.lang.ClassCastException- ifrhsis not assignment-compatible withlhs- Since:
 - 2.0
 
 - Check if arrays are the same using 
 
- 
append
public CompareToBuilder append(long[] lhs, long[] rhs)
Appends to the
builderthe deep comparison of twolongarrays.- Check if arrays are the same using 
== - Check if for 
null,nullis less than non-null - Check array length, a shorter length array is less than a longer length array
 - Check array contents element by element using 
append(long, long) 
- Parameters:
 lhs- left-hand arrayrhs- right-hand array- Returns:
 - this - used to chain append calls
 
 - Check if arrays are the same using 
 
- 
append
public CompareToBuilder append(int[] lhs, int[] rhs)
Appends to the
builderthe deep comparison of twointarrays.- Check if arrays are the same using 
== - Check if for 
null,nullis less than non-null - Check array length, a shorter length array is less than a longer length array
 - Check array contents element by element using 
append(int, int) 
- Parameters:
 lhs- left-hand arrayrhs- right-hand array- Returns:
 - this - used to chain append calls
 
 - Check if arrays are the same using 
 
- 
append
public CompareToBuilder append(short[] lhs, short[] rhs)
Appends to the
builderthe deep comparison of twoshortarrays.- Check if arrays are the same using 
== - Check if for 
null,nullis less than non-null - Check array length, a shorter length array is less than a longer length array
 - Check array contents element by element using 
append(short, short) 
- Parameters:
 lhs- left-hand arrayrhs- right-hand array- Returns:
 - this - used to chain append calls
 
 - Check if arrays are the same using 
 
- 
append
public CompareToBuilder append(char[] lhs, char[] rhs)
Appends to the
builderthe deep comparison of twochararrays.- Check if arrays are the same using 
== - Check if for 
null,nullis less than non-null - Check array length, a shorter length array is less than a longer length array
 - Check array contents element by element using 
append(char, char) 
- Parameters:
 lhs- left-hand arrayrhs- right-hand array- Returns:
 - this - used to chain append calls
 
 - Check if arrays are the same using 
 
- 
append
public CompareToBuilder append(byte[] lhs, byte[] rhs)
Appends to the
builderthe deep comparison of twobytearrays.- Check if arrays are the same using 
== - Check if for 
null,nullis less than non-null - Check array length, a shorter length array is less than a longer length array
 - Check array contents element by element using 
append(byte, byte) 
- Parameters:
 lhs- left-hand arrayrhs- right-hand array- Returns:
 - this - used to chain append calls
 
 - Check if arrays are the same using 
 
- 
append
public CompareToBuilder append(double[] lhs, double[] rhs)
Appends to the
builderthe deep comparison of twodoublearrays.- Check if arrays are the same using 
== - Check if for 
null,nullis less than non-null - Check array length, a shorter length array is less than a longer length array
 - Check array contents element by element using 
append(double, double) 
- Parameters:
 lhs- left-hand arrayrhs- right-hand array- Returns:
 - this - used to chain append calls
 
 - Check if arrays are the same using 
 
- 
append
public CompareToBuilder append(float[] lhs, float[] rhs)
Appends to the
builderthe deep comparison of twofloatarrays.- Check if arrays are the same using 
== - Check if for 
null,nullis less than non-null - Check array length, a shorter length array is less than a longer length array
 - Check array contents element by element using 
append(float, float) 
- Parameters:
 lhs- left-hand arrayrhs- right-hand array- Returns:
 - this - used to chain append calls
 
 - Check if arrays are the same using 
 
- 
append
public CompareToBuilder append(boolean[] lhs, boolean[] rhs)
Appends to the
builderthe deep comparison of twobooleanarrays.- Check if arrays are the same using 
== - Check if for 
null,nullis less than non-null - Check array length, a shorter length array is less than a longer length array
 - Check array contents element by element using 
append(boolean, boolean) 
- Parameters:
 lhs- left-hand arrayrhs- right-hand array- Returns:
 - this - used to chain append calls
 
 - Check if arrays are the same using 
 
- 
toComparison
public int toComparison()
Returns a negative integer, a positive integer, or zero as thebuilderhas judged the "left-hand" side as less than, greater than, or equal to the "right-hand" side.- Returns:
 - final comparison result
 
 
 - 
 
 -