我想在JScience中定义一个新的距离单位。项目网站的“教程”部分只是指向 Javadoc,虽然它相当完整,但对我来说有点过于密集,无法理解我实际上是如何定义自己的单元的。
你能举个例子吗?
干杯。
皮特
我想在JScience中定义一个新的距离单位。项目网站的“教程”部分只是指向 Javadoc,虽然它相当完整,但对我来说有点过于密集,无法理解我实际上是如何定义自己的单元的。
你能举个例子吗?
干杯。
皮特
我知道这是一个旧帖子,但是..无论如何我都会发布答案,也许它会对某人有用
为了在 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;
}
}
也许这个关于Java单元的其他SO问题可以提供帮助。
请看一下 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 中迁移到新标准)