按数量过滤计量单位

unit-of-measurement filter by quantity

我们正在使用很棒的 unit-of-measurement framework to manage units dynamically. I have the requirement to filter a list of units by quantity. E.g. display all mass (tonne, kg ....). The list results in an generic capture list (which is not ideal - i know). The generic information does not exist at runtime (only at compile time). However for the unit 接口存在一个实现来检查是否存在兼容性:

quantity检查兼容性的接口吗?

数量为 Mass 的非工作示例。

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

这是 Java 语言的一个常见问题,因为 Java 目前还没有提供 Reified Generics

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

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

returns 给定 Quantity class 的默认(或系统)单位。尽管 Dimension 在数量上更像是 "umbrella",但您还可以获得特定维度下所有单位的列表。

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

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