2015-05-07 4 views
2

У нас есть система, в которой пользователь может предоставлять данные любого устройства. Данные хранятся и потенциально преобразуются в любую другую единицу измерения того же размера. Он основан на JScience api.Печать всех определенных единиц в JScience

Я хотел бы создать список всех поддерживаемых единиц, а также все их псевдонимы. Кажется, я не могу найти способ сделать это. В настоящее время я просто делаю это:

for (javax.measure.unit.Unit<?> unit: javax.measure.unit.SI.getInstance().getUnits()) 
     System.out.println(UnitFormat.getInstance().format(unit)); 

    for (javax.measure.unit.Unit<?> unit: javax.measure.unit.NonSI.getInstance().getUnits()) 
     System.out.println(UnitFormat.getInstance().format(unit)); 

Во-первых, это будет производить только список ярлыков, я не могу найти способ, чтобы получить в псевдонимами вообще.

Во-вторых, он даже не содержит все единицы. Если я посмотрю в декомпилированном файле javax.measure.unit.UnitFormat, который, как представляется, содержит все метки; Я вижу линию:

DEFAULT.label(NonSI.ROENTGEN, "Roentgen"); 

Но я не вижу «Реконтген» на выходе. у кого-нибудь есть решение?

+1

Я закончил с вашим вопросом, потому что мне нужно то же самое. После некоторого обширного копания в исходном коде, я почти уверен, что на самом деле это невозможно :(Я получу единицы по рефлексии из классов SI и NonSI. Если вы считаете это действительным решением, я могу опубликовать его здесь –

+0

Я пришел к такому же выводу. Поскольку есть несколько других вещей, которые нам нужно сделать, которые не могут быть выполнены в существующем API, я думаю, что мы просто собираемся копировать и строить свои собственные. – Andy

ответ

1

Возможно, вы захотите дать JSR 363. Это преемник JScience 4 и JSR 275, который никогда не заканчивался, а JSR 363 - в сентябре 2016 года.

JSR 363 знает несколько систем Unit, но давайте просто возьмем один из встроенных в RI. Вы можете использовать утилиту библиотеки под названием SystemOfUnitsReporter и применить его следующим образом:

import tec.units.ri.unit.Units; 
import tec.uom.lib.common.util.SystemOfUnitsReporter; 

SystemOfUnitsReporter reporter = SystemOfUnitsReporter.of(Units.getInstance()); 
reporter.report(); 

Это распечатает список единиц в SystemOfUnits реализации на консоль.

Смежные вопросы