5.6 Rechnen mit Einheiten: Java Units Specification
 
Die Java Units Specification (http://www.jcp.org/en/jsr/detail?id=108) beschreibt Einheiten – wie Meter, Kilogramm – und Konvertierungen zwischen diesen Einheiten sowie Größen und Dimensionen. 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://java-tutor.com/go/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) von Jean-Marie Dautelle unter http://jscience.org/, was neben den Einheiten auch noch andere APIs implementiert. Die Bibliothek bietet:
|
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.
J.A.D.E bindet sich in der aktuellen Version nicht mehr an die javax.units-Schnittstellen, sodass die Typen aus dem Paket org.jscience.physics.units zu nutzen sind:
Listing 5.4
UnitDemo.java
import org.jscience.physics.units.Converter;
import org.jscience.physics.units.NonSI;
import org.jscience.physics.units.SI;
import org.jscience.physics.units.Unit;
public class UnitDemo
{
public static void main( String[] args )
{
Unit unitMeter = SI.METER;
Unit unitMile = NonSI.MILE;
System.out.println( unitMeter.getSystemUnit() ); // m
System.out.println( unitMile.getSystemUnit() ); // m
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
}
}
Damit das Beispiel mit J.A.D.E funktioniert, müssen die beiden Java-Archive jscience.jar sowie javolution.jar in den Klassenpfad mit aufgenommen werden.
|