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 and 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 and 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(Object object)` Append a `hashCode` for an `Object`.
    `HashCodeBuilder` | `append(Object[] array)` Append a `hashCode` for an `Object` array.
    `HashCodeBuilder` | `append(short value)` Append a `hashCode` for a `short`.
    `HashCodeBuilder` | `append(short[] array)` Append a `hashCode` for a `short` 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

Copyright © 2001–2023 Apache Cayenne. All rights reserved.