Распечатка всех определенных единиц в 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");

Но я не вижу "Reontgen" в выводе. у кого-нибудь есть решение?


person Andy    schedule 07.05.2015    source источник
comment
Я остановился на вашем вопросе, потому что мне нужно то же самое. После некоторого обширного копания в исходном коде я почти уверен, что это на самом деле невозможно :(. Я получу единицы путем отражения из классов SI и NonSI. Если вы считаете это правильным решением, я могу опубликовать его здесь   -  person David ten Hove    schedule 22.05.2015
comment
Я пришел к такому же выводу. Поскольку нам нужно сделать еще несколько вещей, которые нельзя сделать в существующем API, я думаю, что мы просто собираемся создать свой собственный.   -  person Andy    schedule 08.06.2015


Ответы (1)


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

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

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

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

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

person Werner Keil    schedule 02.06.2017