# Class ELArithmetic

java.lang.Object
org.apache.el.lang.ELArithmetic

Direct Known Subclasses:
  `ELArithmetic.BigDecimalDelegate, ELArithmetic.BigIntegerDelegate, ELArithmetic.DoubleDelegate, ELArithmetic.LongDelegate`

public abstract class ELArithmetic extends Object
A helper class of Arithmetic defined by the EL Specification.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static final class`
  `ELArithmetic.BigDecimalDelegate`
  Arithmetic delegate for BigDecimal operations.
  `static final class`
  `ELArithmetic.BigIntegerDelegate`
  Arithmetic delegate for BigInteger operations.
  `static final class`
  `ELArithmetic.DoubleDelegate`
  Arithmetic delegate for double/float operations.
  `static final class`
  `ELArithmetic.LongDelegate`
  Arithmetic delegate for long/integer operations.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final ELArithmetic.BigDecimalDelegate`
  `BIGDECIMAL`
  BigDecimal arithmetic delegate instance.
  `static final ELArithmetic.BigIntegerDelegate`
  `BIGINTEGER`
  BigInteger arithmetic delegate instance.
  `static final ELArithmetic.DoubleDelegate`
  `DOUBLE`
  Double arithmetic delegate instance.
  `static final ELArithmetic.LongDelegate`
  `LONG`
  Long arithmetic delegate instance.

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `ELArithmetic()`
  Protected constructor for subclasses.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected abstract Number`
  `add(Number num0, Number num1)`
  Add two numbers.
  `static Number`
  `add(Object obj0, Object obj1)`
  Add two objects, coercing them to the appropriate numeric type.
  `protected abstract Number`
  `coerce(Number num)`
  Coerce a number to the delegate's preferred type.
  `protected final Number`
  `coerce(Object obj)`
  Coerce an object to a number.
  `protected abstract Number`
  `coerce(String str)`
  Coerce a string to a number.
  `protected abstract Number`
  `divide(Number num0, Number num1)`
  Divide two numbers.
  `static Number`
  `divide(Object obj0, Object obj1)`
  Divide two objects, coercing them to the appropriate numeric type.
  `static boolean`
  `isNumber(Object obj)`
  Check if the given object is a number.
  `static boolean`
  `isNumberType(Class<?> type)`
  Check if the given class is a number type.
  `protected abstract boolean`
  `matches(Object obj0, Object obj1)`
  Check if this delegate matches the given operand types.
  `protected abstract Number`
  `mod(Number num0, Number num1)`
  Compute the modulo of two numbers.
  `static Number`
  `mod(Object obj0, Object obj1)`
  Compute the modulo of two objects, coercing them to the appropriate numeric type.
  `protected abstract Number`
  `multiply(Number num0, Number num1)`
  Multiply two numbers.
  `static Number`
  `multiply(Object obj0, Object obj1)`
  Multiply two objects, coercing them to the appropriate numeric type.
  `protected abstract Number`
  `subtract(Number num0, Number num1)`
  Subtract two numbers.
  `static Number`
  `subtract(Object obj0, Object obj1)`
  Subtract two objects, coercing them to the appropriate numeric type.

  ### Methods inherited from class Object

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

- ## Field Details

  - ### BIGDECIMAL

    public static final ELArithmetic.BigDecimalDelegate BIGDECIMAL
    BigDecimal arithmetic delegate instance.

  - ### BIGINTEGER

    public static final ELArithmetic.BigIntegerDelegate BIGINTEGER
    BigInteger arithmetic delegate instance.

  - ### DOUBLE

    public static final ELArithmetic.DoubleDelegate DOUBLE
    Double arithmetic delegate instance.

  - ### LONG

    public static final ELArithmetic.LongDelegate LONG
    Long arithmetic delegate instance.

- ## Constructor Details

  - ### ELArithmetic

    protected ELArithmetic()
    Protected constructor for subclasses.

- ## Method Details

  - ### add

    public static Number add(Object obj0, Object obj1)
    Add two objects, coercing them to the appropriate numeric type.
    Parameters:
      `obj0` - The first operand
      `obj1` - The second operand
    Returns:
      The result of the addition

  - ### mod

    public static Number mod(Object obj0, Object obj1)
    Compute the modulo of two objects, coercing them to the appropriate numeric type.
    Parameters:
      `obj0` - The dividend
      `obj1` - The divisor
    Returns:
      The result of the modulo operation

  - ### subtract

    public static Number subtract(Object obj0, Object obj1)
    Subtract two objects, coercing them to the appropriate numeric type.
    Parameters:
      `obj0` - The minuend
      `obj1` - The subtrahend
    Returns:
      The result of the subtraction

  - ### divide

    public static Number divide(Object obj0, Object obj1)
    Divide two objects, coercing them to the appropriate numeric type.
    Parameters:
      `obj0` - The dividend
      `obj1` - The divisor
    Returns:
      The result of the division

  - ### multiply

    public static Number multiply(Object obj0, Object obj1)
    Multiply two objects, coercing them to the appropriate numeric type.
    Parameters:
      `obj0` - The first factor
      `obj1` - The second factor
    Returns:
      The result of the multiplication

  - ### isNumber

    public static boolean isNumber(Object obj)
    Check if the given object is a number.
    Parameters:
      `obj` - The object to check
    Returns:
      true if the object is a number

  - ### isNumberType

    public static boolean isNumberType(Class<?> type)
    Check if the given class is a number type.
    Parameters:
      `type` - The class to check
    Returns:
      true if the class is a number type

  - ### add

    protected abstract Number add(Number num0, Number num1)
    Add two numbers.
    Parameters:
      `num0` - The first number
      `num1` - The second number
    Returns:
      The sum

  - ### multiply

    protected abstract Number multiply(Number num0, Number num1)
    Multiply two numbers.
    Parameters:
      `num0` - The first number
      `num1` - The second number
    Returns:
      The product

  - ### subtract

    protected abstract Number subtract(Number num0, Number num1)
    Subtract two numbers.
    Parameters:
      `num0` - The minuend
      `num1` - The subtrahend
    Returns:
      The difference

  - ### mod

    protected abstract Number mod(Number num0, Number num1)
    Compute the modulo of two numbers.
    Parameters:
      `num0` - The dividend
      `num1` - The divisor
    Returns:
      The remainder

  - ### coerce

    protected abstract Number coerce(Number num)
    Coerce a number to the delegate's preferred type.
    Parameters:
      `num` - The number to coerce
    Returns:
      The coerced number

  - ### coerce

    protected final Number coerce(Object obj)
    Coerce an object to a number.
    Parameters:
      `obj` - The object to coerce
    Returns:
      The coerced number

  - ### coerce

    protected abstract Number coerce(String str)
    Coerce a string to a number.
    Parameters:
      `str` - The string to coerce
    Returns:
      The coerced number

  - ### divide

    protected abstract Number divide(Number num0, Number num1)
    Divide two numbers.
    Parameters:
      `num0` - The dividend
      `num1` - The divisor
    Returns:
      The quotient

  - ### matches

    protected abstract boolean matches(Object obj0, Object obj1)
    Check if this delegate matches the given operand types.
    Parameters:
      `obj0` - The first operand
      `obj1` - The second operand
    Returns:
      true if this delegate should handle these types