5

问题介绍

我正在尝试使用Java Units of Measurement (JSR 363) 的这种实现

我想改变几个提供的单位的行为。一个例子是DEGREE_ANGLE,因此度数符号 (°) 被附加到任何 Quantity 被toString'd 的末尾。就像现在一样,数量将打印6.1345983929 [rad?]

解决方案的尝试

我已经尝试了很多不同的方法来实现这一点,但似乎在其他示例中存在的一种方法AbstractSystemsOfUnits (例如来自此用于度量单位实现的统一代码)是使用如下静态块:

// //////////////////////////////////////////////////////////////////////////
// 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");
}

我试图通过扩展我正在使用的实现Units类来调整这个解决方案。

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 更改单元上的标签?

4

1 回答 1

5

嗯,我试了一下,你描述的基本方法没有问题,你使用的那个库(版本 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

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

于 2017-06-19T21:07:32.013 回答