物理的測定が不十分なモデルは、重大なプログラミングエラーを引き起こす可能性がある。特にそれが表示するユニットに全く関係のないシンプルな数字としての測定のモデル実践は脆弱なコードを生成する。他のデベロッパまたはコードの他の部分は他の尺度を表示しているものとみなし、その数字を誤解してしまうかもしれない。たとえばある人の体重がポンド、キログラム、またはストーンと、どの単位で表されているか明確でないのと同じ事である。この問題はテストで解決するのはとても困難で、既に世界中のいたるところで膨大な費用が費やされているのだ(NASAは火星のオービターの操作においてLockheed Martin開発チームが英語の尺度を使用した一方エージェントチームがメトリック法を使用したために1億2500万ドルの損失を被った。)。
JSR-275はインターフェース、Mesurable、クラス、Measureと共に新たなパッケージ、javax.measureを導入している。
Measurableは測定可能な(例:高度、身長)値を表す事ができ、互換性ユニットが与えられた属性を表す。
Measurable height = person.getHeight();
long inches = height.longValue(NonSI.INCH);
ジェネリックを使用することによってMeasurableはタイプセーフになる。コンパイル時間のエラーはMeasurableを必要とする機能に受け渡したときに生じる。
Measurable weight = person.getWeight();
person.setHeight( weight ); // error!
Measureは数値と特定の単位である特定の尺度を表している。特定の測定可能な値(例:geoffreyWiseman.getHeight())は 異なる尺度で表示することができる。(例:Measure.valueOf(73,NonSI.INCH), Measure.valueOf(1.8542,SI.METRE)
APIは、単位のシステム内に保たれる通常の尺度と測定と単位をパラメータ化するのに使用される量(例:質量、高さ、力量、圧力等)を含んでいる。SIはプレフィックスと単位両方(METER, KILO(METER)等)のメトリック法を表していて、NonSIはメトリック法の属さない共通の単位を所有している(DAY, FOOT, KNOT,等)。
UnitConverterを使用して同じ寸法の単位間での変換は可能である。解析とフォーマットはフィートとインチのようなコンビネーション用の複合ユニットを含めたものから成っている。時間、分、秒等である。APIは拡張用にデザインされていて、また新たな単位、システム、量の生成をサポートしている。
JSR-310、日付・時間APIのサポートにおけるJSR-275の使用に関して物議がかもされていたが、更なるディスカッションが必要となるかもしれない。Stephen Colebourne氏はJSR-275において指摘している。Java 7に適しているだろうか(source)?日付・時間のユニットは変換用の一貫性化学的単位のように扱うことも可能である。
ふう。私たちは月と日付の変換をどれくらい正確に行えているだろうか?そしてそれは一体本当は何を意味しているのだろうか?さて、私が全てを理解したのを前提にそれは1年を365日、5時間、49分、12秒である事と一ヶ月はそれの12分の1とする事なのである。そしてそれからそのデータを使用して月を何日に変更するのである。
これに関してもっと学びたい場合は仕様(source)かもしくはリファレンス実装(source)を探求して欲しい。
原文はこちらです:http://www.infoq.com/news/2007/10/jsr275-units-measures