Java-JScience определяет новую единицу измерения
Я хочу определить новую единицу расстояния в JScience. Раздел "учебник" на веб-сайте проекта просто приводит к Javadoc, который, хотя и довольно полный, немного слишком плотный для меня, чтобы понять, как я на самом деле определяю свою собственную единицу.
Не могли бы вы привести пример?
Ура.
Пит
3 ответа:
Возможно этот другой так Вопрос о единицах в Java может помочь.
Я знаю, что это Старая почта, но ... . я собираюсь опубликовать ответ в любом случае, может быть, это будет кому-то полезно
Чтобы определить пользовательскую единицу в JScience, вы должны расширить класс
SystemOfUnits
и определить здесь все ваши пользовательские единицы.Проверьте exemple ниже (я определяю единицу для акров)
public class MyUnits extends SystemOfUnits { private static HashSet<Unit<?>> UNITS = new HashSet(); private static final MyUnits INSTANCE = new MyUnits(); public static final Unit<Area> ACRE = myUnits((SI.METER.pow(2)).times(4046.8564224).asType(Area.class)); public static MyUnits getInstance() { return INSTANCE; } @Override public Set<Unit<?>> getUnits() { return Collections.unmodifiableSet(UNITS); } private static <U extends Unit<?>> U myUnits(U unit) { UNITS.add(unit); return unit; } }
Пожалуйста, посмотрите, как JSR 363 RI делает это (преемник 275, который был реализован JScience 4) https://github.com/unitsofmeasurement/unit-ri/blob/master/src/main/java/tec/units/ri/format/SimpleUnitFormat.java
По умолчанию simpleunitformat поддерживает UTF-8, в то время как ASCII предназначен для ограниченных сред или устройств, которые могут не иметь графического интерфейса или ограниченных наборов символов:
DEFAULT.label(MetricPrefix.MICRO(Units.LITRE), "µl"); ASCII.label(MetricPrefix.MICRO(Units.LITRE), "microL");
Обратите внимание, что метод label() будет введен в API JSR 363 в следующий кандидат выпущен для публичного призыва. В настоящее время это часть RI (https://github.com/unitsofmeasurement/unit-ri , не JScience, хотя она может в конечном итоге перейти на новый стандарт, тоже в V5)