You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Indriya库为ProductUnit设置别名后序列化不生效问题

为Indriya派生质量流量单位设置友好别名失效问题

任务

我想要给UOM的ProductUnit设置别名,让JSON/前端能显示友好的单位名称,目标单位是kg/h——这是由SI基本单位kg和s派生的质量流量单位。

使用SimpleUnitFormat的alias方法设置别名时无报错,但别名未生效,尽管方法注释明确说明该方法会“为单位添加全局别名”,我无法定位问题原因。方法签名如下:

public abstract void alias(Unit<?> unit, String alias);

问题重现

我预期将字符串“kg/h”解析为Indriya单位后,序列化时返回“kg/h”,但实际返回的是(kg/s)*3600。

单元测试代码

public class UnitsTest {
    private static final SimpleUnitFormat fs;
    private static final Unit<MassFlowRate> KILOGRAM_PER_HOUR;
    static {
        fs = SimpleUnitFormat.getInstance();
        // KILOGRAM_PER_SECOND 定义在 si.uom.SI 中
        KILOGRAM_PER_HOUR = KILOGRAM_PER_SECOND.multiply(3600);
        fs.alias(KILOGRAM_PER_SECOND.multiply(3600), "kg/h");
    }


    @Test
    void testFlowRate() {
        String unitName = "kg/h";
        Unit<? extends Quantity<?>> rate = fs.parse(unitName);
        Assertions.assertEquals(unitName, rate.toString()); //<-- 测试失败
        Assertions.assertEquals(rate, KILOGRAM_PER_HOUR);
    }
}

失败信息

org.opentest4j.AssertionFailedError: 
Expected :kg/h
Actual   :(kg/s)*3600

派生单位的字符串表示物理上是正确的,但不符合用户端的显示需求。

已尝试方案

  • 替换rate.toString()为rate.getName()或rate.getSymbol(),均返回null;
  • 使用alternate()方法尝试设置别名:
KILOGRAM_PER_SECOND.multiply(3600).alternate("kg/h");

抛出异常:

java.lang.IllegalArgumentException: The parent unit: (kg/s)*3600 is not an unscaled SI unit
    at tech.units.indriya.unit.AlternateUnit.<init>(AlternateUnit.java:91)
    at tech.units.indriya.AbstractUnit.alternate(AbstractUnit.java:336)
  • 尝试切换到EBNFUnitFormat,但该格式不支持别名功能。

环境

问题在Windows和Linux环境下均能复现,使用Java 13,POM核心依赖如下:

<dependencies>
    <dependency>
        <groupId>tech.units</groupId>
        <artifactId>indriya</artifactId>
        <version>2.1.3</version>
    </dependency>
    <dependency>
        <groupId>si.uom</groupId>
        <artifactId>si-units</artifactId>
        <version>2.1</version>
    </dependency>
</dependencies>

内容的提问来源于stack exchange,提问作者Johannes Jander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:50:29