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

  • Type Parameters:
    Q - The type of the quantity measured by this unit.
    All Implemented Interfaces:
    java.io.Serializable, java.lang.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:
    Serialized Form
    • Field Detail

      • elements

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

        private final java.lang.String symbol
        Holds the symbol for this unit.
    • Constructor Detail

      • 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:
        java.lang.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 Detail

      • 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:
        java.lang.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:
        java.lang.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:
        java.lang.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:
        java.lang.IndexOutOfBoundsException - if index is out of range (index < 0 || index >= getUnitCount()).
      • getBaseUnits

        public java.util.Map<javax.measure.Unit<?>,​java.lang.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​(java.lang.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 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(AbstractUnit 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 System Unit unit.
        Specified by:
        getSystemConverter in class AbstractUnit<Q extends javax.measure.Quantity<Q>>
        Returns:
        getConverterTo(this.toSystemUnit())
        See Also:
        AbstractUnit.toSystemUnit()
      • 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 java.lang.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>>