我们正在使用优秀的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));
}
答案 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平台提供了具体化的泛型或其他更好的类型信息方式,而不是它的内容。