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

  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 Details

  - ### 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 Details

  - ### 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