/*
 * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package jakarta.json;

import java.math.BigDecimal;
import java.math.BigInteger;

An immutable JSON number value.

Implementations may use a BigDecimal object to store the numeric value internally. The BigDecimal object can be constructed from the following types: int BigDecimal(int), long BigDecimal(long), BigInteger BigDecimal(BigInteger), double BigDecimal.valueOf(double), and String BigDecimal(String). Some of the method semantics in this class are defined using the BigDecimal semantics.

/** * An immutable JSON number value. * * <p> * Implementations may use a {@link BigDecimal} object to store the numeric * value internally. * The {@code BigDecimal} object can be constructed from the following types: * <code>int</code> {@link BigDecimal#BigDecimal(int)}, * <code>long</code> {@link BigDecimal#BigDecimal(long)}, * <code>BigInteger</code> {@link BigDecimal#BigDecimal(BigInteger)}, * <code>double</code> {@link BigDecimal#valueOf(double)}, and * <code>String</code> {@link BigDecimal#BigDecimal(String)}. * Some of the method semantics in this class are defined using the * {@code BigDecimal} semantics. */
public interface JsonNumber extends JsonValue {
Returns true if this JSON number is a integral number. This method semantics are defined using bigDecimalValue().scale(). If the scale is zero, then it is considered integral type. This integral type information can be used to invoke an appropriate accessor method to obtain a numeric value as in the following example:

JsonNumber num = ...
if (num.isIntegral()) {
    num.longValue();     // or other methods to get integral value
} else {
    num.doubleValue();   // or other methods to get decimal number value
}

Returns:true if this number is a integral number, otherwise false
/** * Returns true if this JSON number is a integral number. This method * semantics are defined using {@code bigDecimalValue().scale()}. If the * scale is zero, then it is considered integral type. This integral type * information can be used to invoke an appropriate accessor method to * obtain a numeric value as in the following example: * * <pre> * <code> * JsonNumber num = ... * if (num.isIntegral()) { * num.longValue(); // or other methods to get integral value * } else { * num.doubleValue(); // or other methods to get decimal number value * } * </code> * </pre> * * @return true if this number is a integral number, otherwise false */
boolean isIntegral();
Returns this JSON number as an int. Note that this conversion can lose information about the overall magnitude and precision of the number value as well as return a result with the opposite sign.
See Also:
Returns:an int representation of the JSON number
/** * Returns this JSON number as an {@code int}. Note that this conversion * can lose information about the overall magnitude and precision of the * number value as well as return a result with the opposite sign. * * @return an {@code int} representation of the JSON number * @see java.math.BigDecimal#intValue() */
int intValue();
Returns this JSON number as an int.
Throws:
  • ArithmeticException – if the number has a nonzero fractional part or if it does not fit in an int
See Also:
Returns:an int representation of the JSON number
/** * Returns this JSON number as an {@code int}. * * @return an {@code int} representation of the JSON number * @throws ArithmeticException if the number has a nonzero fractional * part or if it does not fit in an {@code int} * @see java.math.BigDecimal#intValueExact() */
int intValueExact();
Returns this JSON number as a long. Note that this conversion can lose information about the overall magnitude and precision of the number value as well as return a result with the opposite sign.
See Also:
Returns:a long representation of the JSON number.
/** * Returns this JSON number as a {@code long}. Note that this conversion * can lose information about the overall magnitude and precision of the * number value as well as return a result with the opposite sign. * * @return a {@code long} representation of the JSON number. * @see java.math.BigDecimal#longValue() */
long longValue();
Returns this JSON number as a long.
Throws:
  • ArithmeticException – if the number has a non-zero fractional part or if it does not fit in a long
See Also:
Returns:a long representation of the JSON number
/** * Returns this JSON number as a {@code long}. * * @return a {@code long} representation of the JSON number * @throws ArithmeticException if the number has a non-zero fractional * part or if it does not fit in a {@code long} * @see java.math.BigDecimal#longValueExact() */
long longValueExact();
Returns this JSON number as a BigInteger object. This is a a convenience method for bigDecimalValue().toBigInteger(). Note that this conversion can lose information about the overall magnitude and precision of the number value as well as return a result with the opposite sign.
See Also:
Returns:a BigInteger representation of the JSON number.
/** * Returns this JSON number as a {@link BigInteger} object. This is a * a convenience method for {@code bigDecimalValue().toBigInteger()}. * Note that this conversion can lose information about the overall * magnitude and precision of the number value as well as return a result * with the opposite sign. * * @return a {@code BigInteger} representation of the JSON number. * @see java.math.BigDecimal#toBigInteger() */
BigInteger bigIntegerValue();
Returns this JSON number as a BigInteger object. This is a convenience method for bigDecimalValue().toBigIntegerExact().
Throws:
See Also:
Returns:a BigInteger representation of the JSON number
/** * Returns this JSON number as a {@link BigInteger} object. This is a * convenience method for {@code bigDecimalValue().toBigIntegerExact()}. * * @return a {@link BigInteger} representation of the JSON number * @throws ArithmeticException if the number has a nonzero fractional part * @see java.math.BigDecimal#toBigIntegerExact() */
BigInteger bigIntegerValueExact();
Returns this JSON number as a double. This is a a convenience method for bigDecimalValue().doubleValue(). Note that this conversion can lose information about the overall magnitude and precision of the number value as well as return a result with the opposite sign.
See Also:
Returns:a double representation of the JSON number
/** * Returns this JSON number as a {@code double}. This is a * a convenience method for {@code bigDecimalValue().doubleValue()}. * Note that this conversion can lose information about the overall * magnitude and precision of the number value as well as return a result * with the opposite sign. * * @return a {@code double} representation of the JSON number * @see java.math.BigDecimal#doubleValue() */
double doubleValue();
Returns this JSON number as a BigDecimal object.
Returns:a BigDecimal representation of the JSON number
/** * Returns this JSON number as a {@link BigDecimal} object. * * @return a {@link BigDecimal} representation of the JSON number */
BigDecimal bigDecimalValue();
Returns this JSON number as a Number object.
Returns:a Number representation of the JSON number
Since:1.1
/** * Returns this JSON number as a {@link Number} object. * * @return a {@link Number} representation of the JSON number * * @since 1.1 */
default Number numberValue() { throw new UnsupportedOperationException(); }
Returns a JSON text representation of the JSON number. The representation is equivalent to BigDecimal.toString().
Returns:JSON text representation of the number
/** * Returns a JSON text representation of the JSON number. The * representation is equivalent to {@link BigDecimal#toString()}. * * @return JSON text representation of the number */
@Override String toString();
Compares the specified object with this JsonNumber object for equality. Returns true if and only if the type of the specified object is also JsonNumber and their bigDecimalValue() objects are equal
Params:
  • obj – the object to be compared for equality with this JsonNumber
Returns:true if the specified object is equal to this JsonNumber
/** * Compares the specified object with this {@code JsonNumber} object for * equality. Returns {@code true} if and only if the type of the specified * object is also {@code JsonNumber} and their {@link #bigDecimalValue()} * objects are <i>equal</i> * * @param obj the object to be compared for equality with * this {@code JsonNumber} * @return {@code true} if the specified object is equal to this * {@code JsonNumber} */
@Override boolean equals(Object obj);
Returns the hash code value for this JsonNumber object. The hash code of a JsonNumber object is defined as the hash code of its bigDecimalValue() object.
Returns:the hash code value for this JsonNumber object
/** * Returns the hash code value for this {@code JsonNumber} object. The * hash code of a {@code JsonNumber} object is defined as the hash code of * its {@link #bigDecimalValue()} object. * * @return the hash code value for this {@code JsonNumber} object */
@Override int hashCode(); }