2017-07-07 72 views
0

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

  • 布尔相适应(即单位);

    @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

这是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平台提供物化前泛型或其他更好类型信息的方式,而不是它的做法。

+0

谢谢 - 数量的默认(或系统)单位的解决方法正在工作。 – itstata

+0

我正在尝试getUnits()方法,使用uom-ri库的METRE从本质上检索Length-dimensioned单元的列表,并且一直获取空集: 'Set <?扩展单元> units = system.getUnits(METRE.getDimension());' 有关我如何滥用API的任何指导?我真的需要这个UI来输入/更新数量。谢谢! – arpieb

+0

谢谢你指出。你使用了RI还是Java SE实现?我们将尝试复制它,并告诉如何更改呼叫或必要时修复问题。 –