0

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

  • boolean isCompatible(Unit that);

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

有没有按数量检查兼容性的接口?

数量为Mass的非工作示例。

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

1 回答 1

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 平台提供具体的泛型或其他更好的类型信息的方式之前,这种附加方法很可能没有多大意义比今天。

于 2017-07-10T17:25:52.507 回答