如何使用 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 using 的 Units
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
您可以随时随地进行。它通常在静态块中完成,以便尽早完成一次,但这不是必需的。
问题介绍
我正在尝试使用 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 的 Units
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
您可以随时随地进行。它通常在静态块中完成,以便尽早完成一次,但这不是必需的。