Record Class Money

java.lang.Object
java.lang.Record
com.example.orderplatform.Money
Record Components:
amount - decimal amount, rounded half up to currency-style precision
currency - three-letter currency code

public record Money(BigDecimal amount, String currency) extends Record
Monetary value object used by pricing, orders and payments.

Amounts are normalized to two decimal places and currencies are stored as uppercase ISO-4217 codes. Negative amounts and mixed-currency arithmetic are rejected as business rule violations.

  • Constructor Details

    • Money

      public Money(BigDecimal amount, String currency)
      Creates an instance of a Money record class.
      Parameters:
      amount - the value for the amount record component
      currency - the value for the currency record component
  • Method Details

    • of

      public static Money of(BigDecimal amount, String currency)
      Creates a normalized money value.
      Parameters:
      amount - decimal amount
      currency - three-letter currency code
      Returns:
      normalized money value
    • add

      public Money add(Money other)
      Adds two monetary values after verifying they use the same currency.
      Parameters:
      other - value to add
      Returns:
      sum of both values
      Throws:
      BusinessRuleViolationException - when currencies differ
    • multiply

      public Money multiply(int factor)
      Multiplies this value by a positive quantity.
      Parameters:
      factor - positive multiplier
      Returns:
      multiplied money value
      Throws:
      BusinessRuleViolationException - when the multiplier is less than one
    • toString

      public final String toString()
      Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.
      Specified by:
      toString in class Record
      Returns:
      a string representation of this object
    • hashCode

      public final int hashCode()
      Returns a hash code value for this object. The value is derived from the hash code of each of the record components.
      Specified by:
      hashCode in class Record
      Returns:
      a hash code value for this object
    • equals

      public final boolean equals(Object o)
      Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared with Objects::equals(Object,Object).
      Specified by:
      equals in class Record
      Parameters:
      o - the object with which to compare
      Returns:
      true if this object is the same as the o argument; false otherwise.
    • amount

      public BigDecimal amount()
      Returns the value of the amount record component.
      Returns:
      the value of the amount record component
    • currency

      public String currency()
      Returns the value of the currency record component.
      Returns:
      the value of the currency record component