【问题标题】:unit-of-measurement filter by quantity按数量过滤的计量单位
【发布时间】:2017-12-11 16:21:31
【问题描述】:

我们正在使用出色的 unit-of-measurement 框架来动态管理单元。我需要按数量过滤单位列表。例如。显示所有质量(吨,公斤 ....)。该列表会生成一个通用捕获列表(这并不理想 - 我知道)。通用信息在运行时不存在(仅在编译时)。但是对于unit 接口,存在一个用于检查兼容性的实现:

  • boolean isCompatible(Unit that);

    @Test
    public void testCompatible_ByUnit(){
        Unit<Mass> kilogram = Units.KILOGRAM;
        Unit<Mass> tonne = NonSI.TONNE;
    
        assertTrue(kilogram.isCompatible(tonne));
    }
    

有没有接口可以通过quantity检查兼容性?

数量为Mass的非工作示例。

    @Test
    public void testCompatible_FilterByQuantityAndCapture(){
        Unit<?> kilogram = Units.KILOGRAM;
        // wish: interface does not exist
        assertTrue(kilogram.isCompatible(Mass.class));
    }

【问题讨论】:

    标签: java units-of-measurement jsr363


    【解决方案1】:

    这是 Java 语言的一个常见问题,因为 Java 迄今为止不提供Reified Generics

    我不知道 Java SE 9 中有此功能,因此我们可能不会在 Java 10 或更高版本之前看到它。

    <Q extends Quantity<Q>> Unit<Q> getUnit(Class<Q> quantityType);
    

    返回给定Quantity 类的默认(或系统)单位。尽管Dimension 更像是数量的“保护伞”,但您也可以获得特定维度下所有单位的列表。

    Set<? extends Unit<?>> getUnits(Dimension dimension);
    

    在 API/SPI 的未来版本中,SystemOfUnits 可能还会为 Quantity 类提供类似的东西,但在底层 Java 平台提供具体化之前,这种附加方法很可能没有多大意义泛型或其他一些比今天更好的类型信息的方式。

    【讨论】:

    • 谢谢 - 使用默认(或系统)数量单位的解决方法对我有用。
    • 我正在尝试使用 uom-ri 库的 METRE 的 getUnits() 方法来从本质上检索长度维度单位的列表,并不断获得空集:Set&lt;? extends Unit&lt;?&gt;&gt; units = system.getUnits(METRE.getDimension()); 关于如何操作的任何指导我在滥用 API?我真的需要这个用于输入/更新数量的 UI。谢谢!
    • 感谢您指出这一点。您使用的是 RI 还是 Java SE 实现?我们将尝试复制它并告诉如何更改调用或在必要时修复问题。
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2021-01-23
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多