ReflectionDiffBuilder

public class org.apache.commons.lang3.builder.ReflectionDiffBuilder<T> extends AbstractReflection implements Builder<DiffResult<T>>[source]

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<Person> diff(Person obj) {
    // No need for null check, as NullPointerException correct if obj is null
    return ReflectionDiffBuilder.<Person>builder()
      .setDiffBuilder(DiffBuilder.<Person>builder()
          .setLeft(this)
          .setRight(obj)
          .setStyle(ToStringStyle.SHORT_PREFIX_STYLE)
          .build())
      .setExcludeFieldNames("userName", "password")
      .build()  // -> ReflectionDiffBuilder
      .build(); // -> DiffResult
  }
}

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.

Parameters:

<T> – type of the left and right object to diff.

See also:
Since:

3.6

Constructors

ReflectionDiffBuilder(Object, Object, ToStringStyle)

Deprecated. Constructs a builder for the specified objects with the specified style.

@Deprecated public ReflectionDiffBuilder(T left, T right, ToStringStyle style)[source]

Deprecated: Use Builder.

Constructs a builder for the specified objects with the specified style.

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

Parameters:
  • left – this object.

  • right – The object to diff against.

  • style – The style will use when outputting the objects, null uses the default

Throws:

java.lang.IllegalArgumentException – Thrown if left or right is null.

Methods

build()

Returns a reference to the object being constructed or result being calculated by the builder.

builder()

Constructs a new Builder.

getExcludeFieldNames()

Gets the field names that should be excluded from the diff.

setExcludeFieldNames(String[])

Deprecated. Sets the field names to exclude.

@Override public DiffResult<T> build()[source]

Returns a reference to the object being constructed or result being calculated by the builder.

Throws:

java.lang.SecurityException – Thrown if an underlying accessible object’s method denies the request.

See also:

SecurityManager#checkPermission

Returns:

The object constructed or result calculated by the builder.

public static <T> ReflectionDiffBuilder.Builder<T> builder()[source]

Constructs a new Builder.

Type parameters:

<T> – type of the left and right object.

Returns:

A new Builder.

Since:

3.15.0

public String[] getExcludeFieldNames()[source]

Gets the field names that should be excluded from the diff.

Returns:

The excludeFieldNames.

Since:

3.13.0

@Deprecated public ReflectionDiffBuilder<T> setExcludeFieldNames(String... excludeFieldNames)[source]

Sets the field names to exclude.

Parameters:

excludeFieldNames – The field names to exclude from the diff or null.

Returns:

this instance.

Since:

3.13.0