5.6 Rechnen mit Einheiten: Java Units Specification
 
Die JSR-108 (Java Units Specification) beschreibt Möglichkeiten, wie Einheiten und Konvertierungen zwischen diesen Einheiten aussehen können. Im Zentrum stehen Größen, Dimensionen und Einheiten. Ein Beispiel:
Größe (mit Formelzeichen)
|
Dimension
|
SI-Einheit
|
Länge (l, s)
|
L
|
Meter (= 1/299 792 458 des Lichtweges in 1 s)
|
Zeit (t)
|
T
|
Sekunde (9 192 631 770 Perioden der 133 Cs-Uhr)
|
Masse (m)
|
M
|
Kilogramm (kg)
|
Elektrische Ladung (Q)
|
Q = I · T
|
Coulomb (C) = A · s
|
Die Dimension einer physikalischen Größe ist ihre Darstellung als Produkt der Basisgrößen. Die Webseite http://www.unc.edu/~rowlett/units/ listet eine gewaltige Zahl von Maßeinheiten auf und erklärt auch ihre Konvertierung.
Eine Implementierung der Java Units Specification ist J.A.D.E. (Java Addition to Default Environment) unter http://jade.dautelle.com/, was neben den Einheiten auch noch andere APIs implementiert. Es implementiert:
|
Kompatibilität zwischen Einheiten |
|
Konvertierung der Größen |
|
Skalierung und arithmetische Operationen |
|
Standardeinheiten |
|
Parser für Einheiten |
Die Klasse javax.units.SI beschreibt die Basisgrößen – etwa die Länge in der Basiseinheit Meter, eine Masse in Kilogramm, die Zeit in Sekunden usw. – und javax.units.NonSI, die nicht-SI Einheiten wie Knoten oder Yard. Die Einheit ist durch die Klasse javax.units.Unit zu beschreiben und javax.units.Converter ermöglichen die Umwandlung von einer Einheit zur anderen.
Listing 5.5
UnitDemo.java
import javax.units.Converter;
import javax.units.NonSI;
import javax.units.SI;
import javax.units.Unit;
import com.dautelle.JADE;
public class UnitDemo
{
public static void main( String args[] )
{
// Vor der Benutzung von J.A.D.E. muss die Bibliothek
// initialisiert werden.
JADE.initialize();
Unit unitMeter = SI.METER;
Unit unitMile = NonSI.MILE;
System.out.println( unitMeter.getSystemUnit() ); // m
System.out.println( unitMile.getSystemUnit() ); // mi
boolean b = unitMile.isCompatible( unitMeter ); // true
// 1 Mile = 1609.344 Meter
// 1 Meter = 0.0006214 Mile
Converter conv = unitMeter.getConverterTo( unitMile );
System.out.println( conv.convert(1000 /* m */ ) ); // 0.621371192237334
}
}
|