我们正在使用出色的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语言的常见问题,因为到目前为止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平台提供经过改进的泛型或某些功能之前,这种附加方法很有可能会变得没有意义。比以前更好的其他类型信息的方法。

09-11 19:14
查看更多