diff options
Diffstat (limited to 'src/unitConverter/unit/SI.java')
-rw-r--r-- | src/unitConverter/unit/SI.java | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/unitConverter/unit/SI.java b/src/unitConverter/unit/SI.java index 4486bf9..cda42e7 100644 --- a/src/unitConverter/unit/SI.java +++ b/src/unitConverter/unit/SI.java @@ -16,6 +16,10 @@ */ package unitConverter.unit; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + import unitConverter.dimension.StandardDimensions; import unitConverter.dimension.UnitDimension; @@ -28,6 +32,13 @@ import unitConverter.dimension.UnitDimension; public enum SI implements UnitSystem { SI; + /** + * This system's base units. + * + * @since 2019-01-25 + */ + private static final Set<BaseUnit> baseUnits = new HashSet<>(); + // base units public static final BaseUnit METRE = SI.getBaseUnit(StandardDimensions.LENGTH); public static final BaseUnit KILOGRAM = SI.getBaseUnit(StandardDimensions.MASS); @@ -39,7 +50,19 @@ public enum SI implements UnitSystem { @Override public BaseUnit getBaseUnit(final UnitDimension dimension) { - return new BaseUnit(dimension, this); + // try to find an existing unit before creating a new one + + Objects.requireNonNull(dimension, "dimension must not be null."); + for (final BaseUnit unit : baseUnits) { + // it will be equal since the conditions for equality are dimension and system, + // and system is always SI. + if (unit.getDimension().equals(dimension)) + return unit; + } + // could not find an existing base unit + final BaseUnit unit = new BaseUnit(dimension, this); + baseUnits.add(unit); + return unit; } @Override |