2015-12-01 10 views
6

Я использую эталонную реализацию JSR 363: Units of Measurement API от maven (tec.units: unit-ri).JSR 363 добавление новых единиц

Теперь я должен добавить несколько единиц, таких как чайная ложка, жидкая унция и так далее.

Im расширив класс Units, чтобы добавить новый блок, как это:

public static final Unit<Volume> TEASPOON = addUnit(new TransformedUnit<Volume>("tsp", CUBIC_METRE, new MultiplyConverter(0.000005))); 

Это похоже на работу для преобразования, но «ч.л» не разбор, так как я могу добавить его в анализатор?

И Im возникли проблемы при добавлении Фаренгейта, например: T (° F) = T (K) × 9/5 - 459,67

Как я могу сделать это с помощью конвертеров, или я должен продлить UnitConverter и создать свою собственную?

ответ

0

Хотя вы можете определить свой собственный блок, общие блоки, как чайной ложку или Fluid Унцию уже доступен модули расширения для JSR 363, как https://github.com/unitsofmeasurement/uom-systems

https://github.com/unitsofmeasurement/uom-systems/tree/master/common для библиотеки RI основы. Фаренгейт тоже есть.

Все эти системы или система «полного SI» доступны в публичном репо JCenter. Мы планируем также синхронизировать его с MavenCentral в ближайшее время, но вы можете использовать его таким же образом из JCenter, если вы добавите его определение репозитория в файлы Maven (или Gradle и т. Д.).

+0

Я также пробовал это упражнение, определяя пользовательский блок PARSEC (я знаю, что он уже существует). Я изо всех сил пытаюсь напечатать его как Parsec (pc). Я всегда печатаю его как метр. Любая помощь, как достичь этого и сделать его конвертируемым в метр, километр и так далее? –

+0

При следующем обновлении PARSEC также будет находиться в [Unicode CLDR] [1], там как на RI, так и на Java SE8 +, используя 'SimpleUnitformat'. [1]: https://github.com/unitsofmeasurement/uom-systems/tree/master/unicode –

0

Благодарим за внимание. Если вы используете SimpleUnitFormat (оставляя в стороне локаль), вам может не хватить выражение label() в нужных местах.

У вас есть учетная запись GitHub, а затем, пожалуйста, напишите ее под номером https://github.com/unitsofmeasurement/uom-systems/issues, если вы можете, и мы рассмотрим проблему как можно скорее. Или напишите PR.

+0

До сих пор PARSEC существует, по крайней мере, в унифицированной системе UCUM, которая имеет специальность выделенных реализаций UnitFormat, см. [UCUMDemoSE] (https://github.com/unitsofmeasurement/uom-demos/blob/master/console/systems/ucum/src/main/java/tec/uom/demo/systems/ucum/UCUMDemoSE.java). Вызов toString() на одном из них возвращается к реализации через 'SimpleUnitformat'. Который в настоящее время не знает всех строк UCUM. Это можно сделать с помощью Label, но, вероятно, вызвало некоторую избыточность или волшебство «отражения». –