Class ProductUnit<Q extends javax.measure.Quantity<Q>>

java.lang.Object
tech.units.indriya.AbstractUnit<Q>
tech.units.indriya.unit.ProductUnit<Q>
Type Parameters:
Q - The type of the quantity measured by this unit.
All Implemented Interfaces:
Serializable, Comparable<javax.measure.Unit<Q>>, javax.measure.Unit<Q>, ComparableUnit<Q>

public final class ProductUnit<Q extends javax.measure.Quantity<Q>> extends AbstractUnit<Q>

This class represents units formed by the product of rational powers of existing physical units.

This class maintains the canonical form of this product (simplest form after factorization). For example: METRE.pow(2).divide(METRE) returns METRE.

Since:
1.0
Version:
1.4.2, November 7, 2017
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • elements

      private final ProductUnit.Element[] elements
      Holds the units composing this product unit.
    • symbol

      private final String symbol
      Holds the symbol for this unit.
  • Constructor Details

    • ProductUnit

      public ProductUnit()
      DefaultQuantityFactory constructor (used solely to create ONE instance).
    • ProductUnit

      public ProductUnit(javax.measure.Unit<?> productUnit)
      Copy constructor (allows for parameterization of product units).
      Parameters:
      productUnit - the product unit source.
      Throws:
      ClassCastException - if the specified unit is not a product unit.
    • ProductUnit

      private ProductUnit(ProductUnit.Element[] elements)
      Product unit constructor.
      Parameters:
      elements - the product elements.
  • Method Details

    • ofProduct

      public static javax.measure.Unit<?> ofProduct(javax.measure.Unit<?> left, javax.measure.Unit<?> right)
      Returns the product of the specified units.
      Parameters:
      left - the left unit operand.
      right - the right unit operand.
      Returns:
      left * right
    • ofQuotient

      public static javax.measure.Unit<?> ofQuotient(javax.measure.Unit<?> left, javax.measure.Unit<?> right)
      Returns the quotient of the specified units.
      Parameters:
      left - the dividend unit operand.
      right - the divisor unit operand.
      Returns:
      dividend / divisor
    • ofRoot

      public static javax.measure.Unit<?> ofRoot(javax.measure.Unit<?> unit, int n)
      Returns the product unit corresponding to the specified root of the specified unit.
      Parameters:
      unit - the unit.
      n - the root's order (n > 0).
      Returns:
      unit^(1/nn)
      Throws:
      ArithmeticException - if n == 0.
    • ofPow

      public static javax.measure.Unit<?> ofPow(javax.measure.Unit<?> unit, int n)
      Returns the product unit corresponding to this unit raised to the specified exponent.
      Parameters:
      unit - the unit.
      nn - the exponent (nn > 0).
      Returns:
      unit^n
    • getUnitCount

      public int getUnitCount()
      Returns the number of unit elements in this product.
      Returns:
      the number of unit elements.
    • getUnit

      public javax.measure.Unit<?> getUnit(int index)
      Returns the unit element at the specified position.
      Parameters:
      index - the index of the unit element to return.
      Returns:
      the unit element at the specified position.
      Throws:
      IndexOutOfBoundsException - if index is out of range (index < 0 || index >= getUnitCount()).
    • getUnitPow

      public int getUnitPow(int index)
      Returns the power exponent of the unit element at the specified position.
      Parameters:
      index - the index of the unit element.
      Returns:
      the unit power exponent at the specified position.
      Throws:
      IndexOutOfBoundsException - if index is out of range (index < 0 || index >= getUnitCount()).
    • getUnitRoot

      public int getUnitRoot(int index)
      Returns the root exponent of the unit element at the specified position.
      Parameters:
      index - the index of the unit element.
      Returns:
      the unit root exponent at the specified position.
      Throws:
      IndexOutOfBoundsException - if index is out of range (index < 0 || index >= getUnitCount()).
    • getBaseUnits

      public Map<javax.measure.Unit<?>,Integer> getBaseUnits()
      Specified by:
      getBaseUnits in interface javax.measure.Unit<Q extends javax.measure.Quantity<Q>>
      Specified by:
      getBaseUnits in class AbstractUnit<Q extends javax.measure.Quantity<Q>>
    • equals

      public boolean equals(Object obj)
      Specified by:
      equals in class AbstractUnit<Q extends javax.measure.Quantity<Q>>
    • hashCode

      public int hashCode()
      Specified by:
      hashCode in class AbstractUnit<Q extends javax.measure.Quantity<Q>>
    • toSystemUnit

      public javax.measure.Unit<Q> toSystemUnit()
      Description copied from class: AbstractUnit
      Returns the unscaled
      invalid reference
      SI
      unit from which this unit is derived. The SI unit can be be used to identify a quantity given the unit. For example: static boolean isAngularVelocity(AbstractUnitinvalid input: '<'?> unit) { return unit.toSystemUnit().equals(RADIAN.divide(SECOND)); } assert(REVOLUTION.divide(MINUTE).isAngularVelocity()); // Returns true.
      Specified by:
      toSystemUnit in class AbstractUnit<Q extends javax.measure.Quantity<Q>>
      Returns:
      the unscaled metric unit from which this unit is derived.
    • getSystemConverter

      public javax.measure.UnitConverter getSystemConverter()
      Description copied from class: AbstractUnit
      Returns the converter from this unit to its unscaled
      invalid reference
      System Unit
      unit.
      Specified by:
      getSystemConverter in class AbstractUnit<Q extends javax.measure.Quantity<Q>>
      Returns:
      getConverterTo(this.toSystemUnit())
      See Also:
    • getDimension

      public javax.measure.Dimension getDimension()
      Specified by:
      getDimension in interface javax.measure.Unit<Q extends javax.measure.Quantity<Q>>
      Specified by:
      getDimension in class AbstractUnit<Q extends javax.measure.Quantity<Q>>
    • getInstance

      private static javax.measure.Unit<?> getInstance(ProductUnit.Element[] leftElems, ProductUnit.Element[] rightElems)
      Returns the unit defined from the product of the specified elements.
      Parameters:
      leftElems - left multiplicand elements.
      rightElems - right multiplicand elements.
      Returns:
      the corresponding unit.
    • gcd

      private static int gcd(int m, int n)
      Returns the greatest common divisor (Euclid's algorithm).
      Parameters:
      m - the first number.
      nn - the second number.
      Returns:
      the greatest common divisor.
    • getSymbol

      public String getSymbol()
      Specified by:
      getSymbol in interface javax.measure.Unit<Q extends javax.measure.Quantity<Q>>
      Overrides:
      getSymbol in class AbstractUnit<Q extends javax.measure.Quantity<Q>>