Package org.apache.cayenne.util

## Class HashCodeBuilder

- java.lang.Object
- - org.apache.cayenne.util.HashCodeBuilder

-     public class HashCodeBuilder
      extends Object

  Assists in implementing `Object.hashCode()` methods. The code is based on HashCodeBuilder from commons-lang 2.1.
  Since:
    3.0

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `HashCodeBuilder()` | Uses two hard coded choices for the constants needed to build a `hashCode`.
    `HashCodeBuilder​(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber)` | Two randomly chosen, non-zero, odd numbers must be passed in.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `HashCodeBuilder` | `append​(boolean value)` | Append a `hashCode` for a `boolean`.
    `HashCodeBuilder` | `append​(boolean[] array)` | Append a `hashCode` for a `boolean` array.
    `HashCodeBuilder` | `append​(byte value)` | Append a `hashCode` for a `byte`.
    `HashCodeBuilder` | `append​(byte[] array)` | Append a `hashCode` for a `byte` array.
    `HashCodeBuilder` | `append​(char value)` | Append a `hashCode` for a `char`.
    `HashCodeBuilder` | `append​(char[] array)` | Append a `hashCode` for a `char` array.
    `HashCodeBuilder` | `append​(double value)` | Append a `hashCode` for a `double`.
    `HashCodeBuilder` | `append​(double[] array)` | Append a `hashCode` for a `double` array.
    `HashCodeBuilder` | `append​(float value)` | Append a `hashCode` for a `float`.
    `HashCodeBuilder` | `append​(float[] array)` | Append a `hashCode` for a `float` array.
    `HashCodeBuilder` | `append​(int value)` | Append a `hashCode` for an `int`.
    `HashCodeBuilder` | `append​(int[] array)` | Append a `hashCode` for an `int` array.
    `HashCodeBuilder` | `append​(long value)` | Append a `hashCode` for a `long`.
    `HashCodeBuilder` | `append​(long[] array)` | Append a `hashCode` for a `long` array.
    `HashCodeBuilder` | `append​(short value)` | Append a `hashCode` for a `short`.
    `HashCodeBuilder` | `append​(short[] array)` | Append a `hashCode` for a `short` array.
    `HashCodeBuilder` | `append​(Object object)` | Append a `hashCode` for an `Object`.
    `HashCodeBuilder` | `append​(Object[] array)` | Append a `hashCode` for an `Object` array.
    `HashCodeBuilder` | `appendSuper​(int superHashCode)` | Adds the result of super.hashCode() to this builder.
    `int` | `toHashCode()` | Return the computed `hashCode`.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### HashCodeBuilder

          public HashCodeBuilder()

      Uses two hard coded choices for the constants needed to build a `hashCode`.

    - #### HashCodeBuilder

          public HashCodeBuilder​(int initialNonZeroOddNumber,
                                 int multiplierNonZeroOddNumber)

      Two randomly chosen, non-zero, odd numbers must be passed in. Ideally these should be different for each class, however this is not vital.

      Prime numbers are preferred, especially for the multiplier.

      Parameters:
        `initialNonZeroOddNumber` - a non-zero, odd number used as the initial value
        `multiplierNonZeroOddNumber` - a non-zero, odd number used as the multiplier
      Throws:
        `IllegalArgumentException` - if the number is zero or even

  - ### Method Detail

    - #### appendSuper

          public HashCodeBuilder appendSuper​(int superHashCode)

      Adds the result of super.hashCode() to this builder.

      Parameters:
        `superHashCode` - the result of calling `super.hashCode()`
      Returns:
        this HashCodeBuilder, used to chain calls.
      Since:
        2.0

    - #### append

          public HashCodeBuilder append​(Object object)

      Append a `hashCode` for an `Object`.

      Parameters:
        `object` - the Object to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(long value)

      Append a `hashCode` for a `long`.

      Parameters:
        `value` - the long to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(int value)

      Append a `hashCode` for an `int`.

      Parameters:
        `value` - the int to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(short value)

      Append a `hashCode` for a `short`.

      Parameters:
        `value` - the short to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(char value)

      Append a `hashCode` for a `char`.

      Parameters:
        `value` - the char to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(byte value)

      Append a `hashCode` for a `byte`.

      Parameters:
        `value` - the byte to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(double value)

      Append a `hashCode` for a `double`.

      Parameters:
        `value` - the double to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(float value)

      Append a `hashCode` for a `float`.

      Parameters:
        `value` - the float to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(boolean value)

      Append a `hashCode` for a `boolean`.

      This adds `iConstant * 1` to the `hashCode` and not a `1231` or `1237` as done in java.lang.Boolean. This is in accordance with the Effective Java design.

      Parameters:
        `value` - the boolean to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(Object[] array)

      Append a `hashCode` for an `Object` array.

      Parameters:
        `array` - the array to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(long[] array)

      Append a `hashCode` for a `long` array.

      Parameters:
        `array` - the array to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(int[] array)

      Append a `hashCode` for an `int` array.

      Parameters:
        `array` - the array to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(short[] array)

      Append a `hashCode` for a `short` array.

      Parameters:
        `array` - the array to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(char[] array)

      Append a `hashCode` for a `char` array.

      Parameters:
        `array` - the array to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(byte[] array)

      Append a `hashCode` for a `byte` array.

      Parameters:
        `array` - the array to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(double[] array)

      Append a `hashCode` for a `double` array.

      Parameters:
        `array` - the array to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(float[] array)

      Append a `hashCode` for a `float` array.

      Parameters:
        `array` - the array to add to the `hashCode`
      Returns:
        this

    - #### append

          public HashCodeBuilder append​(boolean[] array)

      Append a `hashCode` for a `boolean` array.

      Parameters:
        `array` - the array to add to the `hashCode`
      Returns:
        this

    - #### toHashCode

          public int toHashCode()

      Return the computed `hashCode`.

      Returns:
        `hashCode` based on the fields appended