source: osm/applications/editors/josm/plugins/opendata/includes/javax/measure/Measurable.java@ 28000

Last change on this file since 28000 was 28000, checked in by donvip, 13 years ago

Import new "opendata" JOSM plugin

File size: 3.3 KB
Line 
1/*
2 * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences.
3 * Copyright (C) 2007 - JScience (http://jscience.org/)
4 * All rights reserved.
5 *
6 * Permission to use, copy, modify, and distribute this software is
7 * freely granted, provided that this notice is preserved.
8 */
9package javax.measure;
10
11import javax.measure.quantity.Quantity;
12import javax.measure.unit.Unit;
13
14/**
15 * <p> This interface represents the measurable, countable, or comparable
16 * property or aspect of a thing.</p>
17 *
18 * <p> Implementing instances are typically the result of a measurement:[code]
19 * Measurable<Mass> weight = Measure.valueOf(180.0, POUND);
20 * [/code]
21 * They can also be created from custom classes:[code]
22 * class Delay implements Measurable<Duration> {
23 * private long nanoSeconds; // Implicit internal unit.
24 * public double doubleValue(Unit<Velocity> unit) { ... }
25 * public long longValue(Unit<Velocity> unit) { ... }
26 * }
27 * Thread.wait(new Delay(24, HOUR)); // Assuming Thread.wait(Measurable<Duration>) method.
28 * [/code]</p>
29 *
30 * <p> Although measurable instances are for the most part scalar quantities;
31 * more complex implementations (e.g. vectors, data set) are allowed as
32 * long as an aggregate magnitude can be determined. For example:[code]
33 * class Velocity3D implements Measurable<Velocity> {
34 * private double x, y, z; // Meter per seconds.
35 * public double doubleValue(Unit<Velocity> unit) { ... } // Returns vector norm.
36 * ...
37 * }
38 * class Sensors<Q extends Quantity> extends Measure<double[], Q> {
39 * public doubleValue(Unit<Q> unit) { ... } // Returns median value.
40 * ...
41 * } [/code]</p>
42 *
43 * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
44 * @version 4.1, June 8, 2007
45 */
46public interface Measurable<Q extends Quantity> extends Comparable<Measurable<Q>> {
47
48 /**
49 * Returns the value of this measurable stated in the specified unit as
50 * a <code>double</code>. If the measurable has too great a magnitude to
51 * be represented as a <code>double</code>, it will be converted to
52 * <code>Double.NEGATIVE_INFINITY</code> or
53 * <code>Double.POSITIVE_INFINITY</code> as appropriate.
54 *
55 * @param unit the unit in which this measurable value is stated.
56 * @return the numeric value after conversion to type <code>double</code>.
57 */
58 double doubleValue(Unit<Q> unit);
59
60 /**
61 * Returns the estimated integral value of this measurable stated in
62 * the specified unit as a <code>long</code>.
63 *
64 * <p> Note: This method differs from the <code>Number.longValue()</code>
65 * in the sense that the closest integer value is returned
66 * and an ArithmeticException is raised instead
67 * of a bit truncation in case of overflow (safety critical).</p>
68 *
69 * @param unit the unit in which the measurable value is stated.
70 * @return the numeric value after conversion to type <code>long</code>.
71 * @throws ArithmeticException if this quantity cannot be represented
72 * as a <code>long</code> number in the specified unit.
73 */
74 long longValue(Unit<Q> unit) throws ArithmeticException;
75
76}
Note: See TracBrowser for help on using the repository browser.