按数量计算的计量单位过滤器

时间:2017-07-07 11:25:09

标签: java units-of-measurement jsr363

我们正在使用优秀的unit-of-measurement框架来动态管理单元。我需要按数量过滤单位列表。例如。显示所有质量(吨,kg ....)。该列表产生一个通用捕获列表(这是不理想的 - 我知道)。通用信息在运行时不存在(仅在编译时)。但是对于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));
    }

1 个答案:

答案 0 :(得分:2)

这是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平台提供了具体化的泛型或其他更好的类型信息方式,而不是它的内容。