如何比较两个 JSR-363 Quantity 对象?
How to compare two JSR-363 Quantity objects?
我正在尝试使用 JSR-363 Quantity 来管理我的应用程序中的一些数量。我有一些类似于以下的代码,我想将其转换为使用数量 class.
Double volume1 = 14d;
Double volume2 = 18d;
Assert.isTrue(volume1 < volume2);
使用数量,我试图找到一种方法来比较两个卷,但 API 中似乎没有任何东西等同于上面的简单比较!
Quantity<Volume> volume1 = Quantities.getQuantity(14d, Units.LITRE);
Quantity<Volume> volume2 = Quantities.getQuantity(18d, Units.LITRE);
Assert.isTrue(volume1 < volume2); <--- operator < doesn't exist
我错过了什么?
<
仅适用于原始数字类型(和盒装等价物)。您不能将它用于对象。
改用volume1.substract(volume2).getValue().doubleValue() < 0
。
事实证明,有一个更新的测量单位规范和一个提供 ComparableQuantity class 的参考实现,它实现了 java.lang.Comparable
。
那么更新的标准是JSR-385 and its reference implementation is Indriya。
有了这个可以做到:
ComparableQuantity<Volume> volume1 = Quantities.getQuantity(14d, Units.LITRE);
ComparableQuantity<Volume> volume2 = Quantities.getQuantity(18d, Units.LITRE);
Assert.isTrue(volume1.isGreaterThan(volume2));
Assert.isTrue(volume2.isLessThan(volume1));
我正在尝试使用 JSR-363 Quantity 来管理我的应用程序中的一些数量。我有一些类似于以下的代码,我想将其转换为使用数量 class.
Double volume1 = 14d;
Double volume2 = 18d;
Assert.isTrue(volume1 < volume2);
使用数量,我试图找到一种方法来比较两个卷,但 API 中似乎没有任何东西等同于上面的简单比较!
Quantity<Volume> volume1 = Quantities.getQuantity(14d, Units.LITRE);
Quantity<Volume> volume2 = Quantities.getQuantity(18d, Units.LITRE);
Assert.isTrue(volume1 < volume2); <--- operator < doesn't exist
我错过了什么?
<
仅适用于原始数字类型(和盒装等价物)。您不能将它用于对象。
改用volume1.substract(volume2).getValue().doubleValue() < 0
。
事实证明,有一个更新的测量单位规范和一个提供 ComparableQuantity class 的参考实现,它实现了 java.lang.Comparable
。
那么更新的标准是JSR-385 and its reference implementation is Indriya。
有了这个可以做到:
ComparableQuantity<Volume> volume1 = Quantities.getQuantity(14d, Units.LITRE);
ComparableQuantity<Volume> volume2 = Quantities.getQuantity(18d, Units.LITRE);
Assert.isTrue(volume1.isGreaterThan(volume2));
Assert.isTrue(volume2.isLessThan(volume1));