Java-JScience определяет новую единицу измерения


Я хочу определить новую единицу расстояния в JScience. Раздел "учебник" на веб-сайте проекта просто приводит к Javadoc, который, хотя и довольно полный, немного слишком плотный для меня, чтобы понять, как я на самом деле определяю свою собственную единицу.

Не могли бы вы привести пример?

Ура.

Пит

3 4

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)