【问题标题】:Java - JScience define a new unitJava - JScience 定义一个新单元
【发布时间】:2011-04-29 19:21:27
【问题描述】:

我想在JScience 中定义一个新的距离单位。项目网站的“教程”部分只是指向 Javadoc,虽然它相当完整,但对我来说有点过于密集,无法理解我实际上是如何定义自己的单元的。

你能举个例子吗?

干杯。

皮特

【问题讨论】:

  • 看起来并没有太多人使用 JScience。也许您必须编写教程。

标签: java units-of-measurement jscience


【解决方案1】:

也许 this other SO question 关于 Java 中的单元会有所帮助。

【讨论】:

  • 对我没有帮助,因为没有明确的信息如何添加新单位。
【解决方案2】:

我知道这是一篇旧帖子,但是..无论如何我都会发布答案,也许它会对某人有用

为了在 JScience 中定义自定义单位,您必须扩展类 SystemOfUnits 并在此处定义所有自定义单位。

查看下面的示例(我正在为 ACRE 定义单位)

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;
   }
}

【讨论】:

【解决方案3】:

请看看 JSR 363 RI 是如何做到这一点的(JScience 4 实现的 275 的继承者) https://github.com/unitsofmeasurement/unit-ri/blob/master/src/main/java/tec/units/ri/format/SimpleUnitFormat.java

SimpleUnitFormat 的默认风格支持 UTF-8,而 ASCII 用于可能没有 GUI 或有限字符集的有限环境或设备:

DEFAULT.label(MetricPrefix.MICRO(Units.LITRE), "µl"); ASCII.label(MetricPrefix.MICRO(Units.LITRE), "microL");

注意,label() 方法将在下一个 Public Draft 候选版本中引入 JSR 363 API。目前它是 RI 的一部分(https://github.com/unitsofmeasurement/unit-ri,不是 JScience,尽管它最终也可能在 V5 中迁移到新标准)

【讨论】:

    猜你喜欢
    • 2019-12-21
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2014-07-13
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多