/*
* 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: - ArithmeticException – if the number has a nonzero fractional part
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();
}