Jean-Marie Dautelle ha escrito este artículo sobre JSR-275 que busca estandarizar las medidad y sus unidades mediante el uso de clases concretas y extensibles.
Actualmente en Java no existe forma simple de lidiar con las medidas usadas para un mismo fin, en el artículo la autora menciona un error en un software desarrollado para la NASA que costó USD$ 125 millones porque la mitad de los programadores usaron unidades inglesas y la otra unidades métricas. Esta especificación busca una forma consistente para lidiar con las unidades de forma tal que no importa si el input esté en celsius o en fahrenheits, el sistema tomará los valores correctos.
Por ejemplo, para obtener el peso de una persona se pondría:
class Person {
void setWeight(Measurable<Mass> weight);
}De esta forma se podría obtener el valor en la unidad que uno quisiera:
double weightInKg = weight.doubleValue(KILOGRAM);
double weightInLb = weight.doubleValue(POUND);
double wrong = weight.doubleValue(LITER); // Compile Error!
Como puedes ver, al querer obtener el peso en una unidad que no aplica para Masas, el compilador te informará del error.
La especificación también tiene métodos estáticos para realizar operaciones entre las unidades, por ejemplo la operación KILO multiplica por mil una unidad y ofrece la posibilidad de crear unidades propias, aquí un ejemplo de la autora:
Unit<Pressure> PASCAL = NEWTON.divide(METER.pow(2)).alternate("Pa");
Unit<Duration> HOUR_MINUTE_SECOND = HOUR.compound(MINUTE).compound(SECOND);
Con esta especificación la conversión de unidades las maneja el JDK por lo que podremos estar seguros de que son correctas y consistentes. Todavía no se ha decidido si este JSR será incluido en JDK 7.