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 | */
|
---|
9 | package javax.measure;
|
---|
10 |
|
---|
11 | import javax.measure.quantity.Quantity;
|
---|
12 | import 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 | */
|
---|
46 | public 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 | }
|
---|