我使用javax.measure库,尝试将km / h转换为min / km。
min / km不属于unit-ri提议的单位的一部分。
所以我尝试创建自己的单位:MINUTE_BY_KILOMETERS
import javax.measure.Quantity;
import javax.measure.Unit;
import javax.measure.quantity.Length;
import javax.measure.quantity.Speed;
import tec.units.ri.quantity.Quantities;
import tec.units.ri.unit.MetricPrefix;
import tec.units.ri.unit.Units;
Quantity<Speed> speed = Quantities.getQuantity(10, Units.KILOMETRE_PER_HOUR);
assertEquals("10 km/h", speed.toString());
// Conversion m/s
assertEquals("2.7777800000000004 m/s", speed.to(Units.METRE_PER_SECOND).toString());
// Conversion min/km
Unit<Speed> MINUTE_BY_KILOMETERS = Units.MINUTE.divide(MetricPrefix.KILO(Units.METRE)).asType(Speed.class);
assertEquals("6 min/km", speed.to(MINUTE_BY_KILOMETERS).toString());
但我有一个例外:
java.lang.ClassCastException: The unit: min/km is not compatible with quantities of type interface javax.measure.quantity.Speed
at tec.units.ri.AbstractUnit.asType(AbstractUnit.java:274)
我想我必须创建自己的Type,但是我不知道怎么做。
有人可以举个例子吗?
答案 0 :(得分:1)
速度定义为距离除以时间,因此您不能以“每公里分钟数”为单位创建Speed
单位。但是,您可以创建自己的反速度测量,这仅是标记界面:
public interface InverseSpeed extends Quantity<InverseSpeed> {}
然后创建这样的单位:
Unit<InverseSpeed> MINUTE_BY_KILOMETERS =
Units.MINUTE.divide(MetricPrefix.KILO(Units.METRE)).asType(InverseSpeed.class);
答案 1 :(得分:1)
我终于发现有一个.inverse函数,以便在需要时进行转换。
因此,您必须在代码中保留(距离/时间)指标以执行所有操作和转换,并在需要值时在末尾添加.inverse():
Unit<Speed> KILOMETERS_BY_MINUTES = MetricPrefix.KILO(Units.METRE).divide(Units.MINUTE).asType(Speed.class);
assertEquals("5.9999952000038395 min/km", speed.to(KILOMETERS_BY_MINUTES).inverse().toString());