/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 1999-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library 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 * Lesser General Public License for more details. */ package org.geotools.measure; import javax.measure.unit.Unit; import org.geotools.util.Utilities; /** * A scalar with an unit. * * @since 2.1 * * @source $URL$ * @version $Id$ * @author Martin Desruisseaux (PMO, IRD) */ public final class Measure extends Number { /** * For compatibility with different versions. */ private static final long serialVersionUID = 6917234039472328164L; /** * The scalar value. */ private final double value; /** * The unit. */ private final Unit<?> unit; /** * Creates a new measure with the specified value and unit. * * @param value The value. * @param unit The unit of measurement for the given value. */ public Measure(final double value, final Unit<?> unit) { this.value = value; this.unit = unit; } /** Returns the scalar value. */ public double doubleValue() {return value;} /** Returns the scalar value. */ public float floatValue() {return (float) value;} /** Returns the scalar value. */ public long longValue() {return (long) value;} /** Returns the scalar value. */ public int intValue() {return (int) value;} /** Returns the scalar value. */ @Override public short shortValue() {return (short) value;} /** Returns the scalar value. */ @Override public byte byteValue() {return (byte) value;} /** * Returns the unit. * * @return The unit of measurement. */ public Unit<?> getUnit() { return unit; } /** * Returns a hash code value for this measure. */ @Override public int hashCode() { long code = Double.doubleToLongBits(value); return (int) code ^ (int)(code >>> 32) ^ unit.hashCode(); } /** * Compares this measure with the specified object for equality. * * @param object The object to compare with this measure. * @return {@code true} if the given object is equals to this measure. */ @Override public boolean equals(final Object object) { if (object instanceof Measure) { final Measure that = (Measure) object; return Utilities.equals(value, that.value) && Utilities.equals(unit, that.unit); } return false; } /** * Returns a string representation of this measure. */ @Override public String toString() { final StringBuilder buffer = new StringBuilder(); buffer.append(value); buffer.append(' '); buffer.append(unit); return buffer.toString(); } }