/** * Copyright (C) 2018 Adrien Hopkins * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package org.unitConverter.unit; import java.util.Objects; import org.unitConverter.dimension.UnitDimension; /** * A system of units. Each unit should be aware of its system. * * @author Adrien Hopkins * @since 2018-12-23 * @since v0.1.0 */ public interface UnitSystem { /** * Gets a base unit for this system and the provided dimension. * * @param dimension * dimension used by base unit * @return base unit * @throws NullPointerException * if dimension is null * @since 2019-01-25 * @since v0.1.0 */ default BaseUnit getBaseUnit(final UnitDimension dimension) { Objects.requireNonNull(dimension, "dimension must not be null."); return new BaseUnit(dimension, this); } /** * @return name of system * @since 2018-12-23 * @since v0.1.0 */ String getName(); }