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