diff options
-rw-r--r-- | src/org/unitConverter/math/ObjectProduct.java | 8 | ||||
-rw-r--r-- | src/org/unitConverter/unit/BaseDimension.java | 6 | ||||
-rw-r--r-- | src/org/unitConverter/unit/BaseUnit.java | 3 | ||||
-rw-r--r-- | src/org/unitConverter/unit/FunctionalUnit.java | 10 | ||||
-rw-r--r-- | src/org/unitConverter/unit/LinearUnit.java | 27 | ||||
-rw-r--r-- | src/org/unitConverter/unit/SI.java | 24 | ||||
-rw-r--r-- | src/org/unitConverter/unit/Unit.java | 3 | ||||
-rw-r--r-- | src/org/unitConverter/unit/UnitDatabase.java | 7 | ||||
-rw-r--r-- | src/org/unitConverter/unit/UnitPrefix.java | 19 |
9 files changed, 91 insertions, 16 deletions
diff --git a/src/org/unitConverter/math/ObjectProduct.java b/src/org/unitConverter/math/ObjectProduct.java index 0cf89ec..29d0f6e 100644 --- a/src/org/unitConverter/math/ObjectProduct.java +++ b/src/org/unitConverter/math/ObjectProduct.java @@ -238,6 +238,14 @@ public final class ObjectProduct<T> { return new ObjectProduct<>(map);
}
+ /**
+ * Converts this product to a string using the objects' {@link Object#toString()} method. If objects have a long
+ * toString representation, it is recommended to use {@link #toString(Function)} instead to shorten the returned
+ * string.
+ *
+ * <p>
+ * {@inheritDoc}
+ */
@Override
public String toString() {
return this.toString(Object::toString);
diff --git a/src/org/unitConverter/unit/BaseDimension.java b/src/org/unitConverter/unit/BaseDimension.java index 35acd18..8e63a17 100644 --- a/src/org/unitConverter/unit/BaseDimension.java +++ b/src/org/unitConverter/unit/BaseDimension.java @@ -39,7 +39,13 @@ public final class BaseDimension { return new BaseDimension(name, symbol); } + /** + * The name of the dimension. + */ private final String name; + /** + * The symbol used by the dimension. Symbols should be short, generally one or two characters. + */ private final String symbol; /** diff --git a/src/org/unitConverter/unit/BaseUnit.java b/src/org/unitConverter/unit/BaseUnit.java index e9ef3fa..d9f7965 100644 --- a/src/org/unitConverter/unit/BaseUnit.java +++ b/src/org/unitConverter/unit/BaseUnit.java @@ -63,6 +63,9 @@ public final class BaseUnit extends Unit { return new BaseUnit(dimension, name, symbol, otherNames); } + /** + * The dimension measured by this base unit. + */ private final BaseDimension dimension; /** diff --git a/src/org/unitConverter/unit/FunctionalUnit.java b/src/org/unitConverter/unit/FunctionalUnit.java index e2ab6e7..586e0d7 100644 --- a/src/org/unitConverter/unit/FunctionalUnit.java +++ b/src/org/unitConverter/unit/FunctionalUnit.java @@ -86,11 +86,21 @@ final class FunctionalUnit extends Unit { this.converterTo = Objects.requireNonNull(converterTo, "converterTo must not be null."); } + /** + * {@inheritDoc} + * + * Uses {@code converterFrom} to convert. + */ @Override public double convertFromBase(final double value) { return this.converterFrom.applyAsDouble(value); } + /** + * {@inheritDoc} + * + * Uses {@code converterTo} to convert. + */ @Override public double convertToBase(final double value) { return this.converterTo.applyAsDouble(value); diff --git a/src/org/unitConverter/unit/LinearUnit.java b/src/org/unitConverter/unit/LinearUnit.java index 7b7338b..1532fc4 100644 --- a/src/org/unitConverter/unit/LinearUnit.java +++ b/src/org/unitConverter/unit/LinearUnit.java @@ -128,11 +128,21 @@ public final class LinearUnit extends Unit { this.conversionFactor = conversionFactor; } + /** + * {@inheritDoc} + * + * Converts by dividing by {@code conversionFactor} + */ @Override protected double convertFromBase(final double value) { return value / this.getConversionFactor(); } + /** + * {@inheritDoc} + * + * Converts by multiplying by {@code conversionFactor} + */ @Override protected double convertToBase(final double value) { return value * this.getConversionFactor(); @@ -170,6 +180,11 @@ public final class LinearUnit extends Unit { return valueOf(base, this.getConversionFactor() / divisor.getConversionFactor()); } + /** + * {@inheritDoc} + * + * Uses the base and conversion factor of units to test for equality. + */ @Override public boolean equals(final Object obj) { if (!(obj instanceof LinearUnit)) @@ -187,6 +202,11 @@ public final class LinearUnit extends Unit { return this.conversionFactor; } + /** + * {@inheritDoc} + * + * Uses the base and conversion factor to compute a hash code. + */ @Override public int hashCode() { return 31 * this.getBase().hashCode() + DecimalComparison.hash(this.getConversionFactor()); @@ -234,7 +254,7 @@ public final class LinearUnit extends Unit { throw new IllegalArgumentException( String.format("Incompatible units for subtraction \"%s\" and \"%s\".", this, subtrahendend)); - // add the units + // subtract the units return valueOf(this.getBase(), this.getConversionFactor() - subtrahendend.getConversionFactor()); } @@ -312,7 +332,10 @@ public final class LinearUnit extends Unit { return valueOf(this.getBase().toExponent(exponent), Math.pow(this.conversionFactor, exponent)); } - // returns a definition of the unit + /** + * @return a string providing a definition of this unit + * @since 2019-10-21 + */ @Override public String toString() { return this.getPrimaryName().orElse("Unnamed unit") diff --git a/src/org/unitConverter/unit/SI.java b/src/org/unitConverter/unit/SI.java index 45a81e2..19d63e6 100644 --- a/src/org/unitConverter/unit/SI.java +++ b/src/org/unitConverter/unit/SI.java @@ -17,6 +17,7 @@ package org.unitConverter.unit;
import org.unitConverter.math.ObjectProduct;
+import org.unitConverter.unit.Unit.NameSymbol;
/**
* All of the units, prefixes and dimensions that are used by the SI, as well as some outside the SI.
@@ -115,9 +116,9 @@ public final class SI { public static final ObjectProduct<BaseDimension> REFLACTIVE_PERMEABILITY = EMPTY.times(EMPTY);
public static final ObjectProduct<BaseDimension> ANGLE = LENGTH.dividedBy(LENGTH);
public static final ObjectProduct<BaseDimension> SOLID_ANGLE = AREA.dividedBy(AREA);
+
// derived dimensions with named SI units
public static final ObjectProduct<BaseDimension> FREQUENCY = EMPTY.dividedBy(TIME);
-
public static final ObjectProduct<BaseDimension> FORCE = MASS.times(ACCELERATION);
public static final ObjectProduct<BaseDimension> ENERGY = FORCE.times(LENGTH);
public static final ObjectProduct<BaseDimension> POWER = ENERGY.dividedBy(TIME);
@@ -142,15 +143,18 @@ public final class SI { /// The units of the SI
public static final LinearUnit ONE = LinearUnit.valueOf(ObjectProduct.empty(), 1);
- public static final LinearUnit METRE = BaseUnits.METRE.asLinearUnit();
- public static final LinearUnit KILOGRAM = BaseUnits.KILOGRAM.asLinearUnit();
- public static final LinearUnit SECOND = BaseUnits.SECOND.asLinearUnit();
- public static final LinearUnit AMPERE = BaseUnits.AMPERE.asLinearUnit();
- public static final LinearUnit KELVIN = BaseUnits.KELVIN.asLinearUnit();
- public static final LinearUnit MOLE = BaseUnits.MOLE.asLinearUnit();
- public static final LinearUnit CANDELA = BaseUnits.CANDELA.asLinearUnit();
- public static final LinearUnit BIT = BaseUnits.BIT.asLinearUnit();
- public static final LinearUnit DOLLAR = BaseUnits.DOLLAR.asLinearUnit();
+ public static final LinearUnit METRE = BaseUnits.METRE.asLinearUnit()
+ .withName(NameSymbol.of("metre", "m", "meter"));
+ public static final LinearUnit KILOGRAM = BaseUnits.KILOGRAM.asLinearUnit()
+ .withName(NameSymbol.of("kilogram", "kg"));
+ public static final LinearUnit SECOND = BaseUnits.SECOND.asLinearUnit()
+ .withName(NameSymbol.of("second", "s", "sec"));
+ public static final LinearUnit AMPERE = BaseUnits.AMPERE.asLinearUnit().withName(NameSymbol.of("ampere", "A"));
+ public static final LinearUnit KELVIN = BaseUnits.KELVIN.asLinearUnit().withName(NameSymbol.of("kelvin", "K"));
+ public static final LinearUnit MOLE = BaseUnits.MOLE.asLinearUnit().withName(NameSymbol.of("mole", "mol"));
+ public static final LinearUnit CANDELA = BaseUnits.CANDELA.asLinearUnit().withName(NameSymbol.of("candela", "cd"));
+ public static final LinearUnit BIT = BaseUnits.BIT.asLinearUnit().withName(NameSymbol.of("bit", "b"));
+ public static final LinearUnit DOLLAR = BaseUnits.DOLLAR.asLinearUnit().withName(NameSymbol.of("dollar", "$"));
// Non-base units
public static final LinearUnit RADIAN = METRE.dividedBy(METRE);
diff --git a/src/org/unitConverter/unit/Unit.java b/src/org/unitConverter/unit/Unit.java index d848ea1..737802a 100644 --- a/src/org/unitConverter/unit/Unit.java +++ b/src/org/unitConverter/unit/Unit.java @@ -511,7 +511,8 @@ public abstract class Unit { public String toString() { return this.getPrimaryName().orElse("Unnamed unit") + (this.getSymbol().isPresent() ? String.format(" (%s)", this.getSymbol().get()) : "") - + ", derived from " + this.getBase().toString(); + + ", derived from " + this.getBase().toString(u -> u.getSymbol().get()) + + (this.getOtherNames().isEmpty() ? "" : ", also called " + String.join(", ", this.getOtherNames())); } /** diff --git a/src/org/unitConverter/unit/UnitDatabase.java b/src/org/unitConverter/unit/UnitDatabase.java index a2b11c3..5985c80 100644 --- a/src/org/unitConverter/unit/UnitDatabase.java +++ b/src/org/unitConverter/unit/UnitDatabase.java @@ -1609,10 +1609,13 @@ public final class UnitDatabase { return Collections.unmodifiableMap(this.prefixes); } + /** + * @return a string stating the number of units, prefixes and dimensions in the database + */ @Override public String toString() { - return String.format("Unit Database with %d units and %d unit prefixes", this.prefixlessUnits.size(), - this.prefixes.size()); + return String.format("Unit Database with %d units, %d unit prefixes and %d dimensions", + this.prefixlessUnits.size(), this.prefixes.size(), this.dimensions.size()); } /** diff --git a/src/org/unitConverter/unit/UnitPrefix.java b/src/org/unitConverter/unit/UnitPrefix.java index 514fa1c..360b0c1 100644 --- a/src/org/unitConverter/unit/UnitPrefix.java +++ b/src/org/unitConverter/unit/UnitPrefix.java @@ -80,6 +80,11 @@ public final class UnitPrefix { return valueOf(this.getMultiplier() / other.getMultiplier()); } + /** + * {@inheritDoc} + * + * Uses the prefix's multiplier to determine equality. + */ @Override public boolean equals(final Object obj) { if (this == obj) @@ -92,10 +97,19 @@ public final class UnitPrefix { return DecimalComparison.equals(this.getMultiplier(), other.getMultiplier()); } + /** + * @return prefix's multiplier + * @since 2019-11-26 + */ public double getMultiplier() { return this.multiplier; } + /** + * {@inheritDoc} + * + * Uses the prefix's multiplier to determine a hash code. + */ @Override public int hashCode() { return DecimalComparison.hash(this.getMultiplier()); @@ -139,8 +153,11 @@ public final class UnitPrefix { return valueOf(Math.pow(this.getMultiplier(), exponent)); } + /** + * @return a string describing the prefix and its multiplier + */ @Override public String toString() { - return String.format("Unit prefix equal to %s", this.multiplier); + return String.format("Unit prefix with multiplier %s", this.multiplier); } } |