Unit

abstract class Unit<U : Unit<U>>(source)

Unit of measurement that defines a quantity, such as grams, meters, or seconds.

This is the base class for units. Actual units (such as Grams and Meters) can be found in the Units class.

Units can be organized in a hierarchy where each unit has an optional parent unit. The parent chain is automatically traversed to find the base unit - the unit at the root of the hierarchy that has no parent. For example, in a time unit hierarchy:

  • Days has parent Hours

  • Hours has parent Minutes

  • Minutes has parent Seconds

  • Seconds has no parent (it is the base unit)

Conversions between units are automatically composed through the parent chain, so converting from Days to the base unit (Seconds) properly chains through Hours and Minutes.

Type Parameters

U

the self-referencing type parameter for type-safe unit operations

Inheritors

Properties

Link copied to clipboard
val baseUnit: U

The base unit for this unit's measurement system. This is found by traversing the parent chain until reaching a unit with no parent. For example:

Functions

Link copied to clipboard
open operator override fun equals(other: Any?): Boolean
Link copied to clipboard
fun equivalent(other: Unit<*>): Boolean

Checks if this unit is equivalent to another one. Equivalence is determined by both units having the same base type and treat the same base unit magnitude as the same magnitude in their own units, to within Measure.EQUIVALENCE_THRESHOLD.

Link copied to clipboard
fun fromBaseUnits(valueInBaseUnits: Double): Double

Converts a value in terms of base units to a value in terms of this unit.

Link copied to clipboard
open override fun hashCode(): Int
Link copied to clipboard

Checks if this unit is the base unit for its own system of measurement.

Link copied to clipboard
fun name(): String

Gets the name of this unit.

Link copied to clipboard
abstract fun of(magnitude: Double): Measure<U>

Creates a new immutable measurement of the given magnitude in terms of this unit. Implementations are strongly recommended to sharpen the return type to a unit-specific measurement implementation.

Link copied to clipboard
abstract fun ofBaseUnits(baseUnitMagnitude: Double): Measure<U>

Creates a new immutable measurement of the given magnitude in terms of this unit's base unit. Implementations are strongly recommended to sharpen the return type to a unit-specific measurement implementation.

Link copied to clipboard
open fun one(): Measure<U>

Gets a measure with a magnitude of 1.0 in terms of this unit. The returned object is guaranteed to be of the same type returned by of. Subclasses are encouraged to override this method to sharpen the return type.

Link copied to clipboard
open fun per(time: TimeUnit): PerUnit<U, TimeUnit>

Combines this unit with a unit of time. This often - but not always - results in a velocity. Subclasses should sharpen the return type to be unit-specific.

Link copied to clipboard
fun symbol(): String

Gets the symbol of this unit.

Link copied to clipboard
fun toBaseUnits(valueInNativeUnits: Double): Double

Converts a value in terms of this unit to a value in terms of the base unit.

Link copied to clipboard
open override fun toString(): String
Link copied to clipboard
open fun zero(): Measure<U>

Gets a measure of zero magnitude in terms of this unit. The returned object is guaranteed to be of the same type returned by of. Subclasses are encouraged to override this method to sharpen the return type.