001/* 002 * Units of Measurement API 003 * Copyright (c) 2014-2023, Jean-Marie Dautelle, Werner Keil, Otavio Santana. 004 * 005 * All rights reserved. 006 * 007 * Redistribution and use in source and binary forms, with or without modification, 008 * are permitted provided that the following conditions are met: 009 * 010 * 1. Redistributions of source code must retain the above copyright notice, 011 * this list of conditions and the following disclaimer. 012 * 013 * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions 014 * and the following disclaimer in the documentation and/or other materials provided with the distribution. 015 * 016 * 3. Neither the name of JSR-385 nor the names of its contributors may be used to endorse or promote products 017 * derived from this software without specific prior written permission. 018 * 019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 021 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 023 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 024 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 025 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 026 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 027 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 028 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 029 */ 030package javax.measure.test.unit; 031 032import javax.measure.Quantity; 033import javax.measure.Unit; 034import javax.measure.test.TestUnit; 035 036/** 037 * Building blocks on top of which all others units are created. Base units are always unscaled metric units. 038 * 039 * <p> 040 * When using the standard model (default), all seven base units are dimensionally independent. 041 * </p> 042 * 043 * @param <Q> 044 * The type of the quantity measured by this unit. 045 * 046 * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a> 047 * @author <a href="mailto:werner@uom.technology">Werner Keil</a> 048 * @version 1.1 049 * @since 1.0 050 * 051 * @see <a href="http://en.wikipedia.org/wiki/SI_base_unit">Wikipedia: SI base unit</a> 052 */ 053public class BaseUnit<Q extends Quantity<Q>> extends TestUnit<Q> { 054 /** 055 * Creates a base unit having the specified symbol. 056 * 057 * @param symbol 058 * the symbol of this base unit. 059 * @param name the name of this base unit. 060 * @throws IllegalArgumentException 061 * if the specified symbol is associated to a different unit. 062 */ 063 public BaseUnit(String symbol, String name) { 064 super(name); 065 this.symbol = symbol; 066 } 067 068 /** 069 * Creates a base unit with name and factor 070 * 071 * @param factor 072 * the factor 073 * @param name the name of this base unit. 074 * @throws IllegalArgumentException 075 * if the specified symbol is associated to a different unit. 076 */ 077 public BaseUnit(String name, double factor) { 078 super(name, factor); 079 } 080 081 /** 082 * Creates a base unit having the specified symbol. 083 * 084 * @param symbol 085 * the symbol of this base unit. 086 * @throws IllegalArgumentException 087 * if the specified symbol is associated to a different unit. 088 */ 089 public BaseUnit(String symbol) { 090 this(symbol, null); 091 } 092 093 @Override 094 public String getSymbol() { 095 return symbol; 096 } 097 098 @Override 099 public boolean equals(Object obj) { 100 if (this == obj) { 101 return true; 102 } 103 if (obj instanceof BaseUnit<?>) { 104 BaseUnit<?> other = (BaseUnit<?>) obj; 105 return symbol != null && symbol.equals(other.symbol); 106 } 107 return false; 108 } 109 110 @Override 111 public int hashCode() { 112 // return Objects.hashCode(symbol); 113 return 0; 114 } 115 116 @Override 117 public Unit<Q> getSystemUnit() { 118 return this; 119 } 120}