Top Description Inners Fields Constructors Methods
tech.units.indriya.function

public abstract Class AbstractConverter

extends Object
implements UnitConverter, Converter<Number, Number>, Serializable, Comparable<UnitConverter>
Class Inheritance
All Implemented Interfaces
java.lang.Comparable, java.io.Serializable, tech.uom.lib.common.function.Converter, javax.measure.UnitConverter
Known Direct Subclasses
tech.units.indriya.function.AbstractConverter.Identity, tech.units.indriya.function.AbstractConverter.Pair, tech.units.indriya.function.AddConverter, tech.units.indriya.function.DoubleMultiplyConverter, tech.units.indriya.function.ExpConverter, tech.units.indriya.function.LogConverter, tech.units.indriya.function.PowerOfIntConverter, tech.units.indriya.function.PowerOfPiConverter, tech.units.indriya.function.RationalConverter
Imports
java.io.Serializable, java.util.ArrayList, .Collections, .Comparator, .List, .Objects, .Optional, java.util.stream.Collectors, javax.measure.UnitConverter, tech.units.indriya.internal.function.Calculator, tech.uom.lib.common.function.Converter, tech.uom.lib.common.util.UnitComparator

The base class for our UnitConverter implementations.

Authors
Jean-Marie Dautelle, Werner Keil, Andi Huber
Since
1.0
Version
2.1, Mai 28, 2020

Nested and Inner Type Summary

Modifier and TypeClass and Description
private static class
AbstractConverter.Identity

This class represents the identity converter (singleton).

public static class
AbstractConverter.Pair

This class represents converters made up of two or more separate converters (in matrix notation [pair] = [left] x [right]).

Field Summary

Modifier and TypeField and Description
protected List<? extends UnitConverter>
conversionSteps

memorization for getConversionSteps

public static final AbstractConverter
IDENTITY

Default identity converter implementing AbstractConverter.

private static final long
public static ConverterCompositionHandler
UNIT_COMPOSITION_HANDLER

Allows for plug in of a custom UnitCompositionHandler.

Constructor Summary

AccessConstructor and Description
protected
AbstractConverter()

DefaultQuantityFactory constructor.

Method Summary

Modifier and TypeMethod and Description
protected abstract boolean

Returns:

whether or not a composition with given that is possible, such that no additional conversion steps are required, with respect to the steps already in place by this converter
canReduceWith
(AbstractConverter that)

Non-API Guard for reduce(AbstractConverter)

public final UnitConverter
concatenate(UnitConverter
the other converter to concatenate with this converter.
converter
)

Implements javax.measure.UnitConverter.concatenate.

Concatenates this converter with another converter.

public final double
convert(double
the numeric value to convert.
value
)

Implements javax.measure.UnitConverter.convert, tech.uom.lib.common.function.Converter.convert.

Converts a double value.

public final Number
convert(Number
the Number value to convert.
value
)

Implements javax.measure.UnitConverter.convert, tech.uom.lib.common.function.Converter.convert.

Converts a Number value.

protected abstract Number

Returns:

transformed value
convertWhenNotIdentity
(Number value)

Non-API

public abstract boolean
equals(Object
the reference object with which to compare.
cvtr
)

Overrides java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.

public final List<? extends UnitConverter>
getConversionSteps()

Implements javax.measure.UnitConverter.getConversionSteps.

Returns the steps of fundamental converters making up this converter or this if the converter is a fundamental converter.

public abstract int
hashCode()

Overrides java.lang.Object.hashCode.

Returns a hash code value for this object.

public final AbstractConverter
inverse()

Implements javax.measure.UnitConverter.inverse.

Returns the inverse of this converter.

protected abstract AbstractConverter
inverseWhenNotIdentity()

Non-API

Returns an AbstractConverter that represents the inverse transformation of this converter, for cases where the transformation is not the identity transformation.

public Optional<Number>

Returns:

optionally the linear factor of this transformation's first derivative, based on whether this transformation allows for RELATIVE scaled Quantities
linearFactor
()

Even though transformations may be composed of addition and multiplication, the first derivative might just be a linear function.

protected AbstractConverter

Returns:

a new AbstractConverter that adds no additional conversion steps, with respect to the steps already in place by this converter
reduce
(AbstractConverter that)

Non-API Guarded by canReduceWith(AbstractConverter)

public final String
toString()

Overrides java.lang.Object.toString.

Returns a string representation of the object.

protected abstract String
transformationLiteral()

Non-API

Returns a String describing the transformation that is represented by this converter.

Inherited from java.lang.Object:
clonefinalizegetClassnotifynotifyAllwaitwaitwait

Field Detail

conversionStepsback to summary
protected List<? extends UnitConverter> conversionSteps

memorization for getConversionSteps

IDENTITYback to summary
public static final AbstractConverter IDENTITY

Default identity converter implementing AbstractConverter.

Note

Checking whether a UnitConverter is an identity operator should be done with UnitConverter.isIdentity() rather than checking for object identity unitConverter == AbstractConverter.IDENTITY.

serialVersionUIDback to summary
private static final long serialVersionUID
UNIT_COMPOSITION_HANDLERback to summary
public static ConverterCompositionHandler UNIT_COMPOSITION_HANDLER

Allows for plug in of a custom UnitCompositionHandler.

Constructor Detail

AbstractConverterback to summary
protected AbstractConverter()

DefaultQuantityFactory constructor.

Method Detail

canReduceWithback to summary
protected abstract boolean canReduceWith(AbstractConverter that)

Non-API Guard for reduce(AbstractConverter)

Returns:boolean

whether or not a composition with given that is possible, such that no additional conversion steps are required, with respect to the steps already in place by this converter

concatenateback to summary
public final UnitConverter concatenate(UnitConverter converter)

Implements javax.measure.UnitConverter.concatenate.

Doc from javax.measure.UnitConverter.concatenate.

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

Parameters
converter:UnitConverter

the other converter to concatenate with this converter.

Returns:UnitConverter

the concatenation of this converter with the other converter.

Annotations
@Override
convertback to summary
public final double convert(double value)

Implements javax.measure.UnitConverter.convert, tech.uom.lib.common.function.Converter.convert.

Doc from javax.measure.UnitConverter.convert.

Converts a double value.

Parameters
value:double

the numeric value to convert.

Returns:double

the double value after conversion.

Annotations
@Override
convertback to summary
public final Number convert(Number value)

Implements javax.measure.UnitConverter.convert, tech.uom.lib.common.function.Converter.convert.

Doc from javax.measure.UnitConverter.convert.

Converts a Number value.

Parameters
value:Number

the Number value to convert.

Returns:Number

the Number value after conversion.

Annotations
@Override
Exceptions
IllegalArgumentException:
if the value is null.
convertWhenNotIdentityback to summary
protected abstract Number convertWhenNotIdentity(Number value)

Non-API

Returns:Number

transformed value

equalsback to summary
public abstract boolean equals(Object cvtr)

Overrides java.lang.Object.equals.

Doc from java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.

The equals method implements an equivalence relation on non-null object references:

  • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
  • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
  • It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
  • For any non-null reference value x, x.equals(null) should return false.

An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes.

Parameters
cvtr:Object

the reference object with which to compare.

Returns:boolean

true if this object is the same as the obj argument; false otherwise.

Annotations
@Override
getConversionStepsback to summary
public final List<? extends UnitConverter> getConversionSteps()

Implements javax.measure.UnitConverter.getConversionSteps.

Doc from javax.measure.UnitConverter.getConversionSteps.

Returns the steps of fundamental converters making up this converter or this if the converter is a fundamental converter.

For example, converter1.getConversionSteps() returns converter1 while converter1.concatenate(converter2).getConversionSteps() returns converter1, converter2.

Returns:List<? extends UnitConverter>

the list of fundamental converters which concatenated make up this converter.

Annotations
@Override
hashCodeback to summary
public abstract int hashCode()

Overrides java.lang.Object.hashCode.

Doc from java.lang.Object.hashCode.

Returns a hash code value for this object. This method is supported for the benefit of hash tables such as those provided by java.util.HashMap.

The general contract of hashCode is:

  • Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
  • If two objects are equal according to the equals method, then calling the hashCode method on each of the two objects must produce the same integer result.
  • It is not required that if two objects are unequal according to the equals method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
Returns:int

a hash code value for this object

Annotations
@Override
inverseback to summary
public final AbstractConverter inverse()

Implements javax.measure.UnitConverter.inverse.

Doc from javax.measure.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:AbstractConverter

the inverse of this converter.

Annotations
@Override
inverseWhenNotIdentityback to summary
protected abstract AbstractConverter inverseWhenNotIdentity()

Non-API

Returns an AbstractConverter that represents the inverse transformation of this converter, for cases where the transformation is not the identity transformation.

linearFactorback to summary
public Optional<Number> linearFactor()

Even though transformations may be composed of addition and multiplication, the first derivative might just be a linear function. This is strictly required for Quantities that are expressed with RELATIVE scope. Eg. Δ2°C or Δ2°F. Otherwise such deltas cannot be converted to ABSOLUTE scope without additional information.

Returns:Optional<Number>

optionally the linear factor of this transformation's first derivative, based on whether this transformation allows for RELATIVE scaled Quantities

reduceback to summary
protected AbstractConverter reduce(AbstractConverter that)

Non-API Guarded by canReduceWith(AbstractConverter)

Returns:AbstractConverter

a new AbstractConverter that adds no additional conversion steps, with respect to the steps already in place by this converter

toStringback to summary
public final String toString()

Overrides java.lang.Object.toString.

Doc from java.lang.Object.toString.

Returns a string representation of the object. Satisfying this method's contract implies a non-null result must be returned.

Returns:String

a string representation of the object

Annotations
@Override
transformationLiteralback to summary
protected abstract String transformationLiteral()

Non-API

Returns a String describing the transformation that is represented by this converter. Contributes to converter's toString method. If null or empty toString output becomes simplified.

tech.units.indriya.function back to summary

private final Class AbstractConverter.Identity

extends AbstractConverter
Class Inheritance

This class represents the identity converter (singleton).

Field Summary

Modifier and TypeField and Description
private static final Optional<Number>
private static final long
Inherited from tech.units.indriya.function.AbstractConverter:
conversionStepsIDENTITYUNIT_COMPOSITION_HANDLER

Constructor Summary

AccessConstructor and Description
private

Method Summary

Modifier and TypeMethod and Description
protected boolean
public int
compareTo(UnitConverter
the object to be compared.
o
)

Implements java.lang.Comparable.compareTo.

Compares this object with the specified object for order.

protected Number
public boolean
equals(Object
the reference object with which to compare.
cvtr
)

Implements abstract tech.units.indriya.function.AbstractConverter.equals.

Indicates whether some other object is "equal to" this one.

public int
hashCode()

Implements abstract tech.units.indriya.function.AbstractConverter.hashCode.

Returns a hash code value for this object.

protected AbstractConverter
inverseWhenNotIdentity()

Implements abstract tech.units.indriya.function.AbstractConverter.inverseWhenNotIdentity.

Non-API

Returns an AbstractConverter that represents the inverse transformation of this converter, for cases where the transformation is not the identity transformation.

public boolean
isIdentity()

Implements javax.measure.UnitConverter.isIdentity.

Indicates if this converter is an identity converter.

public boolean
isLinear()

Implements javax.measure.UnitConverter.isLinear.

Indicates whether this converter represents a (one-dimensional) linear transformation, that is a linear map (wikipedia) from a one-dimensional vector space (a scalar) to a one-dimensional vector space.

public Optional<Number>
linearFactor()

Overrides tech.units.indriya.function.AbstractConverter.linearFactor.

Even though transformations may be composed of addition and multiplication, the first derivative might just be a linear function.

protected AbstractConverter
protected String
transformationLiteral()

Implements abstract tech.units.indriya.function.AbstractConverter.transformationLiteral.

Non-API

Returns a String describing the transformation that is represented by this converter.

private IllegalStateException
Inherited from tech.units.indriya.function.AbstractConverter:
concatenateconvertconvertgetConversionStepsinversetoString

Field Detail

ONEback to summary
private static final Optional<Number> ONE
serialVersionUIDback to summary
private static final long serialVersionUID

Hides tech.units.indriya.function.AbstractConverter.serialVersionUID.

Constructor Detail

Identityback to summary
private Identity()

Method Detail

canReduceWithback to summary
protected boolean canReduceWith(AbstractConverter that)

Implements abstract tech.units.indriya.function.AbstractConverter.canReduceWith.

Doc from tech.units.indriya.function.AbstractConverter.canReduceWith.

Non-API Guard for reduce(AbstractConverter)

Returns:boolean

whether or not a composition with given that is possible, such that no additional conversion steps are required, with respect to the steps already in place by this converter

Annotations
@Override
compareToback to summary
public int compareTo(UnitConverter o)

Implements java.lang.Comparable.compareTo.

Doc from java.lang.Comparable.compareTo.

Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

The implementor must ensure signum(x.compareTo(y)) == -signum(y.compareTo(x)) for all x and y. (This implies that x.compareTo(y) must throw an exception if and only if y.compareTo(x) throws an exception.)

The implementor must also ensure that the relation is transitive: (x.compareTo(y) > 0 && y.compareTo(z) > 0) implies x.compareTo(z) > 0.

Finally, the implementor must ensure that x.compareTo(y)==0 implies that signum(x.compareTo(z)) == signum(y.compareTo(z)), for all z.

Parameters
o:UnitConverter

the object to be compared.

Returns:int

a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

Annotations
@Override
convertWhenNotIdentityback to summary
protected Number convertWhenNotIdentity(Number value)

Implements abstract tech.units.indriya.function.AbstractConverter.convertWhenNotIdentity.

Doc from tech.units.indriya.function.AbstractConverter.convertWhenNotIdentity.

Non-API

Returns:Number

transformed value

Annotations
@Override
equalsback to summary
public boolean equals(Object cvtr)

Implements abstract tech.units.indriya.function.AbstractConverter.equals.

Doc from java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.

The equals method implements an equivalence relation on non-null object references:

  • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
  • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
  • It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
  • For any non-null reference value x, x.equals(null) should return false.

An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes.

Parameters
cvtr:Object

the reference object with which to compare.

Returns:boolean

true if this object is the same as the obj argument; false otherwise.

Annotations
@Override
hashCodeback to summary
public int hashCode()

Implements abstract tech.units.indriya.function.AbstractConverter.hashCode.

Doc from java.lang.Object.hashCode.

Returns a hash code value for this object. This method is supported for the benefit of hash tables such as those provided by java.util.HashMap.

The general contract of hashCode is:

  • Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
  • If two objects are equal according to the equals method, then calling the hashCode method on each of the two objects must produce the same integer result.
  • It is not required that if two objects are unequal according to the equals method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
Returns:int

a hash code value for this object

Annotations
@Override
inverseWhenNotIdentityback to summary
protected AbstractConverter inverseWhenNotIdentity()

Implements abstract tech.units.indriya.function.AbstractConverter.inverseWhenNotIdentity.

Doc from tech.units.indriya.function.AbstractConverter.inverseWhenNotIdentity.

Non-API

Returns an AbstractConverter that represents the inverse transformation of this converter, for cases where the transformation is not the identity transformation.

Annotations
@Override
isIdentityback to summary
public boolean isIdentity()

Implements javax.measure.UnitConverter.isIdentity.

Doc from javax.measure.UnitConverter.isIdentity.

Indicates if this converter is an identity converter. The identity converter returns its input argument (convert(x) == x).

Note

Identity converters are also always 'linear', see UnitConverter#isLinear().

Returns:boolean

true if this converter is an identity converter.

Annotations
@Override
isLinearback to summary
public boolean isLinear()

Implements javax.measure.UnitConverter.isLinear.

Doc from javax.measure.UnitConverter.isLinear.

Indicates whether this converter represents a (one-dimensional) linear transformation, that is a linear map (wikipedia) from a one-dimensional vector space (a scalar) to a one-dimensional vector space. Typically from 'R' to 'R', with 'R' the real numbers.

Given such a 'linear' converter 'A', let 'u', 'v' and 'r' be arbitrary numbers, then the following must hold by definition:

  • A(u + v) == A(u) + A(v)
  • A(r * u) == r * A(u)

Given a second 'linear' converter 'B', commutativity of composition follows by above definition:

  • (A o B) (u) == (B o A) (u)
In other words, two 'linear' converters do have the property that A(B(u)) == B(A(u)), meaning for 'A' and 'B' the order of their composition does not matter. Expressed as Java code:

A.concatenate(B).convert(u) == B.concatenate(A).convert(u)

Note: For composing UnitConverters see also UnitConverter#concatenate(UnitConverter).
Returns:boolean

true if this converter represents a linear transformation; false otherwise.

Annotations
@Override
linearFactorback to summary
public Optional<Number> linearFactor()

Overrides tech.units.indriya.function.AbstractConverter.linearFactor.

Doc from tech.units.indriya.function.AbstractConverter.linearFactor.

Even though transformations may be composed of addition and multiplication, the first derivative might just be a linear function. This is strictly required for Quantities that are expressed with RELATIVE scope. Eg. Δ2°C or Δ2°F. Otherwise such deltas cannot be converted to ABSOLUTE scope without additional information.

Returns:Optional<Number>

optionally the linear factor of this transformation's first derivative, based on whether this transformation allows for RELATIVE scaled Quantities

Annotations
@Override
reduceback to summary
protected AbstractConverter reduce(AbstractConverter that)

Overrides tech.units.indriya.function.AbstractConverter.reduce.

Doc from tech.units.indriya.function.AbstractConverter.reduce.

Non-API Guarded by canReduceWith(AbstractConverter)

Returns:AbstractConverter

a new AbstractConverter that adds no additional conversion steps, with respect to the steps already in place by this converter

Annotations
@Override
transformationLiteralback to summary
protected String transformationLiteral()

Implements abstract tech.units.indriya.function.AbstractConverter.transformationLiteral.

Doc from tech.units.indriya.function.AbstractConverter.transformationLiteral.

Non-API

Returns a String describing the transformation that is represented by this converter. Contributes to converter's toString method. If null or empty toString output becomes simplified.

Annotations
@Override
unreachableback to summary
private IllegalStateException unreachable()
tech.units.indriya.function back to summary

public final Class AbstractConverter.Pair

extends AbstractConverter
implements Serializable
Class Inheritance
All Implemented Interfaces
java.io.Serializable

This class represents converters made up of two or more separate converters (in matrix notation [pair] = [left] x [right]).

Field Summary

Modifier and TypeField and Description
private final UnitConverter
left

Holds the first converter.

private final UnitConverter
right

Holds the second converter.

private static final long
private static final Comparator<T>
Inherited from tech.units.indriya.function.AbstractConverter:
conversionStepsIDENTITYUNIT_COMPOSITION_HANDLER

Constructor Summary

AccessConstructor and Description
public
Pair(UnitConverter
the left converter, not null.
left
,
UnitConverter
the right converter.
right
)

Creates a pair converter resulting from the combined transformation of the specified converters.

Method Summary

Modifier and TypeMethod and Description
protected boolean
public int
compareTo(UnitConverter
the object to be compared.
obj
)

Implements java.lang.Comparable.compareTo.

Compares this object with the specified object for order.

protected Number
protected List<? extends UnitConverter>
public boolean
equals(Object
the reference object with which to compare.
obj
)

Implements abstract tech.units.indriya.function.AbstractConverter.equals.

Indicates whether some other object is "equal to" this one.

public UnitConverter
public UnitConverter
public int
hashCode()

Implements abstract tech.units.indriya.function.AbstractConverter.hashCode.

Returns a hash code value for this object.

public AbstractConverter.Pair
inverseWhenNotIdentity()

Implements abstract tech.units.indriya.function.AbstractConverter.inverseWhenNotIdentity.

Non-API

Returns an AbstractConverter that represents the inverse transformation of this converter, for cases where the transformation is not the identity transformation.

public boolean
isIdentity()

Implements javax.measure.UnitConverter.isIdentity.

Indicates if this converter is an identity converter.

public boolean
isLinear()

Implements javax.measure.UnitConverter.isLinear.

Indicates whether this converter represents a (one-dimensional) linear transformation, that is a linear map (wikipedia) from a one-dimensional vector space (a scalar) to a one-dimensional vector space.

public Optional<Number>
linearFactor()

Overrides tech.units.indriya.function.AbstractConverter.linearFactor.

Even though transformations may be composed of addition and multiplication, the first derivative might just be a linear function.

private IllegalArgumentException
protected String
transformationLiteral()

Implements abstract tech.units.indriya.function.AbstractConverter.transformationLiteral.

Non-API

Returns a String describing the transformation that is represented by this converter.

Inherited from tech.units.indriya.function.AbstractConverter:
concatenateconvertconvertgetConversionStepsinversereducetoString

Field Detail

leftback to summary
private final UnitConverter left

Holds the first converter.

rightback to summary
private final UnitConverter right

Holds the second converter.

serialVersionUIDback to summary
private static final long serialVersionUID

Hides tech.units.indriya.function.AbstractConverter.serialVersionUID.

unitComparatorback to summary
private static final Comparator<T> unitComparator
Annotations
@SuppressWarnings:rawtypes

Constructor Detail

Pairback to summary
public Pair(UnitConverter left, UnitConverter right)

Creates a pair converter resulting from the combined transformation of the specified converters.

Parameters
left:UnitConverter

the left converter, not null.

right:UnitConverter

the right converter.

Exceptions
IllegalArgumentException:
if either the left or right converter are null

Method Detail

canReduceWithback to summary
protected boolean canReduceWith(AbstractConverter that)

Implements abstract tech.units.indriya.function.AbstractConverter.canReduceWith.

Doc from tech.units.indriya.function.AbstractConverter.canReduceWith.

Non-API Guard for reduce(AbstractConverter)

Returns:boolean

whether or not a composition with given that is possible, such that no additional conversion steps are required, with respect to the steps already in place by this converter

Annotations
@Override
compareToback to summary
public int compareTo(UnitConverter obj)

Implements java.lang.Comparable.compareTo.

Doc from java.lang.Comparable.compareTo.

Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

The implementor must ensure signum(x.compareTo(y)) == -signum(y.compareTo(x)) for all x and y. (This implies that x.compareTo(y) must throw an exception if and only if y.compareTo(x) throws an exception.)

The implementor must also ensure that the relation is transitive: (x.compareTo(y) > 0 && y.compareTo(z) > 0) implies x.compareTo(z) > 0.

Finally, the implementor must ensure that x.compareTo(y)==0 implies that signum(x.compareTo(z)) == signum(y.compareTo(z)), for all z.

Parameters
obj:UnitConverter

the object to be compared.

Returns:int

a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.

Annotations
@SuppressWarnings:unchecked
@Override
convertWhenNotIdentityback to summary
protected Number convertWhenNotIdentity(Number value)

Implements abstract tech.units.indriya.function.AbstractConverter.convertWhenNotIdentity.

Doc from tech.units.indriya.function.AbstractConverter.convertWhenNotIdentity.

Non-API

Returns:Number

transformed value

Annotations
@Override
createConversionStepsback to summary
protected List<? extends UnitConverter> createConversionSteps()
equalsback to summary
public boolean equals(Object obj)

Implements abstract tech.units.indriya.function.AbstractConverter.equals.

Doc from java.lang.Object.equals.

Indicates whether some other object is "equal to" this one.

The equals method implements an equivalence relation on non-null object references:

  • It is reflexive: for any non-null reference value x, x.equals(x) should return true.
  • It is symmetric: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
  • It is consistent: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
  • For any non-null reference value x, x.equals(null) should return false.

An equivalence relation partitions the elements it operates on into equivalence classes; all the members of an equivalence class are equal to each other. Members of an equivalence class are substitutable for each other, at least for some purposes.

Parameters
obj:Object

the reference object with which to compare.

Returns:boolean

true if this object is the same as the obj argument; false otherwise.

Annotations
@Override
getLeftback to summary
public UnitConverter getLeft()
getRightback to summary
public UnitConverter getRight()
hashCodeback to summary
public int hashCode()

Implements abstract tech.units.indriya.function.AbstractConverter.hashCode.

Doc from java.lang.Object.hashCode.

Returns a hash code value for this object. This method is supported for the benefit of hash tables such as those provided by java.util.HashMap.

The general contract of hashCode is:

  • Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
  • If two objects are equal according to the equals method, then calling the hashCode method on each of the two objects must produce the same integer result.
  • It is not required that if two objects are unequal according to the equals method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
Returns:int

a hash code value for this object

Annotations
@Override
inverseWhenNotIdentityback to summary
public AbstractConverter.Pair inverseWhenNotIdentity()

Implements abstract tech.units.indriya.function.AbstractConverter.inverseWhenNotIdentity.

Doc from tech.units.indriya.function.AbstractConverter.inverseWhenNotIdentity.

Non-API

Returns an AbstractConverter that represents the inverse transformation of this converter, for cases where the transformation is not the identity transformation.

Annotations
@Override
isIdentityback to summary
public boolean isIdentity()

Implements javax.measure.UnitConverter.isIdentity.

Doc from javax.measure.UnitConverter.isIdentity.

Indicates if this converter is an identity converter. The identity converter returns its input argument (convert(x) == x).

Note

Identity converters are also always 'linear', see UnitConverter#isLinear().

Returns:boolean

true if this converter is an identity converter.

Annotations
@Override
isLinearback to summary
public boolean isLinear()

Implements javax.measure.UnitConverter.isLinear.

Doc from javax.measure.UnitConverter.isLinear.

Indicates whether this converter represents a (one-dimensional) linear transformation, that is a linear map (wikipedia) from a one-dimensional vector space (a scalar) to a one-dimensional vector space. Typically from 'R' to 'R', with 'R' the real numbers.

Given such a 'linear' converter 'A', let 'u', 'v' and 'r' be arbitrary numbers, then the following must hold by definition:

  • A(u + v) == A(u) + A(v)
  • A(r * u) == r * A(u)

Given a second 'linear' converter 'B', commutativity of composition follows by above definition:

  • (A o B) (u) == (B o A) (u)
In other words, two 'linear' converters do have the property that A(B(u)) == B(A(u)), meaning for 'A' and 'B' the order of their composition does not matter. Expressed as Java code:

A.concatenate(B).convert(u) == B.concatenate(A).convert(u)

Note: For composing UnitConverters see also UnitConverter#concatenate(UnitConverter).
Returns:boolean

true if this converter represents a linear transformation; false otherwise.

Annotations
@Override
linearFactorback to summary
public Optional<Number> linearFactor()

Overrides tech.units.indriya.function.AbstractConverter.linearFactor.

Doc from tech.units.indriya.function.AbstractConverter.linearFactor.

Even though transformations may be composed of addition and multiplication, the first derivative might just be a linear function. This is strictly required for Quantities that are expressed with RELATIVE scope. Eg. Δ2°C or Δ2°F. Otherwise such deltas cannot be converted to ABSOLUTE scope without additional information.

Returns:Optional<Number>

optionally the linear factor of this transformation's first derivative, based on whether this transformation allows for RELATIVE scaled Quantities

Annotations
@Override
requiresAbstractConverterback to summary
private IllegalArgumentException requiresAbstractConverter()
transformationLiteralback to summary
protected String transformationLiteral()

Implements abstract tech.units.indriya.function.AbstractConverter.transformationLiteral.

Doc from tech.units.indriya.function.AbstractConverter.transformationLiteral.

Non-API

Returns a String describing the transformation that is represented by this converter. Contributes to converter's toString method. If null or empty toString output becomes simplified.

Annotations
@Override