Class ReflectionDiffBuilder<T>

  • Type Parameters:
    T - type of the left and right object to diff.
    All Implemented Interfaces:
    Builder<DiffResult<T>>

    public class ReflectionDiffBuilder<T>
    extends java.lang.Object
    implements Builder<DiffResult<T>>
    Assists in implementing Diffable.diff(Object) methods.

    All non-static, non-transient fields (including inherited fields) of the objects to diff are discovered using reflection and compared for differences.

    To use this class, write code as follows:

     public class Person implements Diffable<Person> {
       String name;
       int age;
       boolean smoker;
       ...
    
       public DiffResult diff(Person obj) {
         // No need for null check, as NullPointerException correct if obj is null
         return new ReflectionDiffBuilder(this, obj, ToStringStyle.SHORT_PREFIX_STYLE)
           .build();
       }
     }
     

    The ToStringStyle passed to the constructor is embedded in the returned DiffResult and influences the style of the DiffResult.toString() method. This style choice can be overridden by calling DiffResult.toString(ToStringStyle).

    See DiffBuilder for a non-reflection based version of this class.

    Since:
    3.6
    See Also:
    Diffable, Diff, DiffResult, ToStringStyle, DiffBuilder
    • Constructor Summary

      Constructors 
      Constructor Description
      ReflectionDiffBuilder​(T lhs, T rhs, ToStringStyle style)
      Constructs a builder for the specified objects with the specified style.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      DiffResult<T> build()
      Returns a reference to the object being constructed or result being calculated by the builder.
      java.lang.String[] getExcludeFieldNames()
      Gets the field names that should be excluded from the diff.
      ReflectionDiffBuilder<T> setExcludeFieldNames​(java.lang.String... excludeFieldNamesParam)
      Sets the field names to exclude.
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • ReflectionDiffBuilder

        public ReflectionDiffBuilder​(T lhs,
                                     T rhs,
                                     ToStringStyle style)
        Constructs a builder for the specified objects with the specified style.

        If lhs == rhs or lhs.equals(rhs) then the builder will not evaluate any calls to append(...) and will return an empty DiffResult when build() is executed.

        Parameters:
        lhs - this object
        rhs - the object to diff against
        style - the style will use when outputting the objects, null uses the default
        Throws:
        java.lang.IllegalArgumentException - if lhs or rhs is null
    • Method Detail

      • getExcludeFieldNames

        public java.lang.String[] getExcludeFieldNames()
        Gets the field names that should be excluded from the diff.
        Returns:
        Returns the excludeFieldNames.
        Since:
        3.13.0
      • setExcludeFieldNames

        public ReflectionDiffBuilder<T> setExcludeFieldNames​(java.lang.String... excludeFieldNamesParam)
        Sets the field names to exclude.
        Parameters:
        excludeFieldNamesParam - The field names to exclude from the diff or null.
        Returns:
        this
        Since:
        3.13.0
      • build

        public DiffResult<T> build()
        Description copied from interface: Builder
        Returns a reference to the object being constructed or result being calculated by the builder.
        Specified by:
        build in interface Builder<T>
        Returns:
        the object constructed or result calculated by the builder.