编程语言
首页 > 编程语言> > 如何使用Java Measurement API更改单元上的标签?

如何使用Java Measurement API更改单元上的标签?

作者:互联网

问题介绍

我正在尝试使用this implementation of the Java Units of Measurement (JSR 363).

我想更改几个提供的单元的行为.一个示例是DEGREE_ANGLE,因此度数符号(°)会附加到要toString的任何Quantity的末尾.现在,数量将打印6.1345983929 [rad?]

尝试解决方案

我已经尝试了许多不同的方法来实现此目的,但是似乎在AbstractSystemsOfUnits其他示例(例如来自Unified Code for Units of Measure实现的示例)中存在的一种方法是使用如下所示的静态块:

// //////////////////////////////////////////////////////////////////////////
// Label adjustments for UCUM system
static {
    SimpleUnitFormat.getInstance().label(ATOMIC_MASS_UNIT, "AMU");
    SimpleUnitFormat.getInstance().label(LITER, "l");
    SimpleUnitFormat.getInstance().label(OUNCE, "oz");      
    SimpleUnitFormat.getInstance().label(POUND, "lb");
}

我尝试通过扩展单元类the implementation I’m using来适应此解决方案.

public final class MyUnits extends Units {
    static {
        SimpleUnitFormat.getInstance().label(DEGREE_ANGLE, "°");
    }
}

尝试使用此扩展的简单测试:

Quantities.getQuantity(2.009880307999, MyUnits.RADIAN).to(MyUnits.DEGREE_ANGLE).toString();

给我115.157658975 [rad?]

如何使用JSR 363 API更改单元上的标签?

解决方法:

嗯,我试了一下,对于您所描述的基本方法以及所使用的库(版本1.0.7)没有任何问题……我错过了什么吗?

无需扩展,基本方法可行,这是一个示例:

import tec.uom.se.ComparableQuantity;
import tec.uom.se.format.SimpleUnitFormat;
import tec.uom.se.quantity.Quantities;
import javax.measure.quantity.Angle;
import static tec.uom.se.unit.Units.DEGREE_ANGLE;
import static tec.uom.se.unit.Units.RADIAN;

public class CustomLabelForDegrees {

    public static void main(String[] args) {
        ComparableQuantity<Angle> x = Quantities.getQuantity(2.009880307999, RADIAN).to(DEGREE_ANGLE);
        System.out.println(x);
        SimpleUnitFormat.getInstance().label(DEGREE_ANGLE, "°");
        System.out.println(x);
        SimpleUnitFormat.getInstance().label(DEGREE_ANGLE, "☯");
        System.out.println(x);
        SimpleUnitFormat.getInstance().label(DEGREE_ANGLE, "degrees");
        System.out.println(x);
    }
}

打印:

115.15765897479669 [rad?]
115.15765897479669 °
115.15765897479669 ☯
115.15765897479669 degrees

您可以随时随地执行此操作.通常在静态块中完成,以便尽早完成一次,但这不是必需的.

标签:units-of-measurement,jsr363,java
来源: https://codeday.me/bug/20191025/1932393.html