Serializable
, Comparable<Q>
, javax.measure.Quantity<Q>
, ComparableQuantity<Q>
, tech.uom.lib.common.function.QuantityConverter<Q>
, tech.uom.lib.common.function.UnitSupplier<Q>
, tech.uom.lib.common.function.ValueSupplier<Number>
NumberQuantity
, TemporalQuantity
, TimeUnitQuantity
public abstract class AbstractQuantity<Q extends javax.measure.Quantity<Q>> extends Object implements ComparableQuantity<Q>, tech.uom.lib.common.function.UnitSupplier<Q>, tech.uom.lib.common.function.ValueSupplier<Number>
This class represents the immutable result of a scalar measurement stated in a known unit.
To avoid any loss of precision, known exact quantities (e.g. physical constants) should not be created from double
constants but from
their decimal representation.
public static final Quantity<Velocity> C = NumberQuantity.parse("299792458 m/s").asType(Velocity.class);
// Speed of Light (exact).
Quantities can be converted to different units.
Quantity<Velocity> milesPerHour = C.to(MILES_PER_HOUR); // Use double implementation (fast).
System.out.println(milesPerHour);
> 670616629.3843951 m/h
Applications may sub-class
// Complex numbers measurements.AbstractQuantity
for particular quantity types.
// Quantity of type Mass based on double primitive types.
public class MassAmount extends AbstractQuantity<Mass> {
private final double kilograms; // Internal SI representation.
private Mass(double kg) { kilograms = kg; }
public static Mass of(double value, Unit<Mass> unit) {
return new Mass(unit.getConverterTo(SI.KILOGRAM).convert(value));
}
public Unit<Mass> getUnit() { return SI.KILOGRAM; }
public Double getValue() { return kilograms; }
...
}
public class ComplexQuantity
<Q extends Quantity>extends AbstractQuantity
<Q>{
public Complex getValue() { ... } // Assuming Complex is a Number.
...
}
// Specializations of complex numbers quantities.
public final class Current extends ComplexQuantity<ElectricCurrent> {...}
public final class Tension extends ComplexQuantity<ElectricPotential> {...}
All instances of this class shall be immutable.
Modifier and Type | Field | Description |
---|---|---|
static javax.measure.Quantity<javax.measure.quantity.Dimensionless> |
NONE |
Holds a dimensionless quantity of none (exact).
|
static javax.measure.Quantity<javax.measure.quantity.Dimensionless> |
ONE |
Holds a dimensionless quantity of one (exact).
|
Modifier | Constructor | Description |
---|---|---|
protected |
AbstractQuantity(javax.measure.Unit<Q> unit) |
Constructor.
|
protected |
AbstractQuantity(javax.measure.Unit<Q> unit,
javax.measure.Quantity.Scale sca) |
Constructor.
|
Modifier and Type | Method | Description |
---|---|---|
<T extends javax.measure.Quantity<T>> |
asType(Class<T> type) |
Casts this quantity to a parameterized quantity of specified nature or throw a
ClassCastException if the dimension of the
specified quantity and its unit's dimension do not match. |
int |
compareTo(javax.measure.Quantity<Q> that) |
FIXME[220] update java-doc
Compares this quantity to the specified quantity.
|
<T extends javax.measure.Quantity<T>,E extends javax.measure.Quantity<E>> |
divide(javax.measure.Quantity<T> that,
Class<E> asTypeQuantity) |
Multiply and cast the
ComparableQuantity |
boolean |
equals(Object obj) |
Compares this quantity against the specified object for strict equality (same unit and same amount).
|
javax.measure.Quantity.Scale |
getScale() |
Returns the absolute or relative scale.
|
javax.measure.Unit<Q> |
getUnit() |
Returns the measurement unit.
|
abstract Number |
getValue() |
Returns the numeric value of the quantity.
|
protected boolean |
hasFraction(double value) |
|
protected boolean |
hasFraction(BigDecimal value) |
|
int |
hashCode() |
Returns the hash code for this quantity.
|
<T extends javax.measure.Quantity<T>> |
inverse(Class<T> quantityClass) |
invert and already cast to defined quantityClass
|
boolean |
isEquivalentTo(javax.measure.Quantity<Q> that) |
Compares two instances of
Quantity <Q> , doing the conversion of unit if necessary. |
boolean |
isGreaterThan(javax.measure.Quantity<Q> that) |
Compares two instances of
. |
boolean |
isGreaterThanOrEqualTo(javax.measure.Quantity<Q> that) |
Compares two instances of
, doing the conversion of unit if necessary. |
boolean |
isLessThan(javax.measure.Quantity<Q> that) |
Compares two instances of
, doing the conversion of unit if necessary. |
boolean |
isLessThanOrEqualTo(javax.measure.Quantity<Q> that) |
Compares two instances of
, doing the conversion of unit if necessary. |
<T extends javax.measure.Quantity<T>,E extends javax.measure.Quantity<E>> |
multiply(javax.measure.Quantity<T> that,
Class<E> asTypeQuantity) |
Divide and cast the
ComparableQuantity |
protected NumberSystem |
numberSystem() |
|
static javax.measure.Quantity<?> |
parse(CharSequence csq) |
Returns the quantity of unknown type corresponding to the specified representation.
|
ComparableQuantity<Q> |
to(javax.measure.Unit<Q> anotherUnit) |
Returns this quantity after conversion to specified unit.
|
String |
toString() |
Returns the
String representation of this quantity. |
add, divide, divide, inverse, multiply, multiply, subtract
public static final javax.measure.Quantity<javax.measure.quantity.Dimensionless> NONE
public static final javax.measure.Quantity<javax.measure.quantity.Dimensionless> ONE
protected AbstractQuantity(javax.measure.Unit<Q> unit, javax.measure.Quantity.Scale sca)
unit
- a unitsca
- the scale, absolute or relativeprotected AbstractQuantity(javax.measure.Unit<Q> unit)
ABSOLUTE
Scale
if none was given.unit
- a unitpublic javax.measure.Quantity.Scale getScale()
public ComparableQuantity<Q> to(javax.measure.Unit<Q> anotherUnit)
NumberQuantity.of(doubleValue(unit), unit)
. If this quantity is already stated in the specified unit, then this quantity is
returned and no conversion is performed.to
in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
to
in interface javax.measure.Quantity<Q extends javax.measure.Quantity<Q>>
to
in interface tech.uom.lib.common.function.QuantityConverter<Q extends javax.measure.Quantity<Q>>
anotherUnit
- the unit in which the returned quantity is stated.ArithmeticException
- if the result is inexact and the quotient has a non-terminating decimal expansion.Quantity.to(Unit)
public boolean isGreaterThan(javax.measure.Quantity<Q> that)
ComparableQuantity
. Conversion of unit can happen if necessaryisGreaterThan
in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
that
- the quantity<Q>
to be compared with this instance.true
if that > this
.public boolean isGreaterThanOrEqualTo(javax.measure.Quantity<Q> that)
ComparableQuantity
, doing the conversion of unit if necessary.isGreaterThanOrEqualTo
in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
that
- the quantity<Q>
to be compared with this instance.true
if that >= this
.public boolean isLessThan(javax.measure.Quantity<Q> that)
ComparableQuantity
, doing the conversion of unit if necessary.isLessThan
in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
that
- the quantity<Q>
to be compared with this instance.true
if that < this
.public boolean isLessThanOrEqualTo(javax.measure.Quantity<Q> that)
ComparableQuantity
, doing the conversion of unit if necessary.isLessThanOrEqualTo
in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
that
- the quantity<Q>
to be compared with this instance.true
if that < this
.public boolean isEquivalentTo(javax.measure.Quantity<Q> that)
ComparableQuantity
Quantity <Q>
, doing the conversion of unit if necessary.isEquivalentTo
in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
that
- the quantity<Q>
to be compared with this instance.true
if that < this
.public int compareTo(javax.measure.Quantity<Q> that)
AbstractQuantity#doubleValue(Unit)
of both this quantity and the specified quantity stated in the same unit (this quantity's unit
).compareTo
in interface Comparable<Q extends javax.measure.Quantity<Q>>
public boolean equals(Object obj)
Similarly to the BigDecimal.equals(java.lang.Object)
method which consider 2.0 and 2.00 as different objects because of different internal scales,
quantities such as Quantities.getQuantity(3.0, KILOGRAM)
Quantities.getQuantity(3, KILOGRAM)
and
Quantities.getQuantity("3 kg")
might not be considered equals because of possible differences in their implementations.
To compare quantities stated using different units or using different amount implementations the compareTo
or
equals(Quantity, epsilon, epsilonUnit)
methods should be used.
public int hashCode()
public String toString()
String
representation of this quantity. The string produced for a given quantity is always the same; it is not
affected by locale. This means that it can be used as a canonical string representation for exchanging quantity, or as a key for a Hashtable,
etc. Locale-sensitive quantity formatting and parsing is handled by the QuantityFormat
implementations and its subclasses.public <T extends javax.measure.Quantity<T>,E extends javax.measure.Quantity<E>> ComparableQuantity<E> divide(javax.measure.Quantity<T> that, Class<E> asTypeQuantity)
ComparableQuantity
ComparableQuantity
divide
in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
that
- quantity to be multipliedasTypeQuantity
- quantity to be convertedQuantity.divide(Quantity)
,
Quantity.asType(Class)
public <T extends javax.measure.Quantity<T>,E extends javax.measure.Quantity<E>> ComparableQuantity<E> multiply(javax.measure.Quantity<T> that, Class<E> asTypeQuantity)
ComparableQuantity
ComparableQuantity
multiply
in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
that
- quantity to be dividedasTypeQuantity
- quantity to be convertedQuantityOperations
,
QuantityOperations#of(Quantity, Class)
,
Quantity.asType(Class)
,
Quantity.multiply(Quantity)
public <T extends javax.measure.Quantity<T>> ComparableQuantity<T> inverse(Class<T> quantityClass)
ComparableQuantity
inverse
in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
quantityClass
- Quantity to be convertedQuantity.inverse()
,
Quantity.asType(Class)
public final <T extends javax.measure.Quantity<T>> ComparableQuantity<T> asType(Class<T> type) throws ClassCastException
ClassCastException
if the dimension of the
specified quantity and its unit's dimension do not match. For example:
Quantity length = AbstractQuantity.parse("2 km").asType(Length.class);
asType
in interface ComparableQuantity<Q extends javax.measure.Quantity<Q>>
asType
in interface javax.measure.Quantity<Q extends javax.measure.Quantity<Q>>
type
- the quantity class identifying the nature of the quantity.ClassCastException
- if the dimension of this unit is different from the specified quantity dimension.UnsupportedOperationException
- if the specified quantity class does not have a public static field named "UNIT" holding the SI unit for the quantity.Unit.asType(Class)
public static javax.measure.Quantity<?> parse(CharSequence csq)
Quatity proportion = AbstractQuantity.parse("0.234").asType(Dimensionless.class);
Note: This method handles only standard
unit format. Locale-sensitive quantity parsing is currently not
supported.
csq
- the decimal value and its unit (if any) separated by space(s).QuantityFormat.getInstance().parse(csq)
protected boolean hasFraction(double value)
protected boolean hasFraction(BigDecimal value)
protected NumberSystem numberSystem()
Copyright © 2005–2020 Units of Measurement project. All rights reserved.