如何使用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