javax.measure.converter
Class UnitConverter

java.lang.Object
  extended by javax.measure.converter.UnitConverter
All Implemented Interfaces:
java.io.Serializable
Direct Known Subclasses:
AddConverter, LogConverter, MultiplyConverter, RationalConverter

public abstract class UnitConverter
extends java.lang.Object
implements java.io.Serializable

This class represents a converter of numeric values.

It is not required for sub-classes to be immutable (e.g. currency converter).

Sub-classes must ensure unicity of the identity converter. In other words, if the result of an operation is equivalent to the identity converter, then the unique IDENTITY instance should be returned.

See Also:
Serialized Form

Field Summary
static UnitConverter IDENTITY
          Holds the identity converter (unique).
 
Constructor Summary
protected UnitConverter()
          Default constructor.
 
Method Summary
 UnitConverter concatenate(UnitConverter converter)
          Concatenates this converter with another converter.
abstract  double convert(double x)
          Converts a double value.
 boolean equals(java.lang.Object cvtr)
          Indicates whether this converter is considered the same as the converter specified.
 int hashCode()
          Returns a hash code value for this converter.
abstract  UnitConverter inverse()
          Returns the inverse of this converter.
abstract  boolean isLinear()
          Indicates if this converter is linear.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

IDENTITY

public static final UnitConverter IDENTITY
Holds the identity converter (unique). This converter does nothing (ONE.convert(x) == x).

Constructor Detail

UnitConverter

protected UnitConverter()
Default constructor.

Method Detail

inverse

public abstract UnitConverter inverse()
Returns the inverse of this converter. If x is a valid value, then x == inverse().convert(convert(x)) to within the accuracy of computer arithmetic.

Returns:
the inverse of this converter.

convert

public abstract double convert(double x)
                        throws ConversionException
Converts a double value.

Parameters:
x - the numeric value to convert.
Returns:
the converted numeric value.
Throws:
ConversionException - if an error occurs during conversion.

isLinear

public abstract boolean isLinear()
Indicates if this converter is linear. A converter is linear if convert(u + v) == convert(u) + convert(v) and convert(r * u) == r * convert(u). For linear converters the following property always hold:[code] y1 = c1.convert(x1); y2 = c2.convert(x2); then y1*y2 = c1.concatenate(c2).convert(x1*x2)[/code]

Returns:
true if this converter is linear; false otherwise.

equals

public boolean equals(java.lang.Object cvtr)
Indicates whether this converter is considered the same as the converter specified. To be considered equal this converter concatenated with the one specified must returns the IDENTITY.

Overrides:
equals in class java.lang.Object
Parameters:
cvtr - the converter with which to compare.
Returns:
true if the specified object is a converter considered equals to this converter;false otherwise.

hashCode

public int hashCode()
Returns a hash code value for this converter. Equals object have equal hash codes.

Overrides:
hashCode in class java.lang.Object
Returns:
this converter hash code value.
See Also:
equals(java.lang.Object)

concatenate

public UnitConverter concatenate(UnitConverter converter)
Concatenates this converter with another converter. The resulting converter is equivalent to first converting by the specified converter, and then converting by this converter.

Note: Implementations must ensure that the IDENTITY instance is returned if the resulting converter is an identity converter.

Parameters:
converter - the other converter.
Returns:
the concatenation of this converter with the other converter.