如何使用 Java 测量值 API 更改单位上的标签?

How can I change the label on a Unit using the 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 usingUnits class 来调整此解决方案。

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

您可以随时随地进行。它通常在静态块中完成,以便尽早完成一次,但这不是必需的。