为什么Joda Interval没有可比性?

时间:2016-03-31 02:52:49

标签: java jodatime

我一直试图生成一个TreeMap<Interval, Set<Object>>来存储年龄分组中的人物实体,其中Interval描述了年龄组的边界。我尝试这样做时出现以下错误。

java.lang.ClassCastException: org.joda.time.Interval cannot be cast to java.lang.Comparable

Interval交换DateTime效果很好,但必须将地图的密钥用作输入才能创建Interval

为什么Joda Interval没有可比性?

1 个答案:

答案 0 :(得分:4)

可以通过多种方式比较间隔。 Interval的javadoc明确地陈述了它:

  

持续时间由ReadableDuration单独表示。因此,间隔不具有可比性。要比较两个区间的长度,您应该比较它们的持续时间。

     

也可以将间隔转换为ReadablePeriod。

如需更长的解释,请考虑以下时间间隔并定义如何订购:

10:00 - 12:00
11:00 - 13:00
11:00 - 12:00
 9:00 - 10:00
 9:00 - 13:00

它们是否应按持续时间(时间跨度)排序?

11:00 - 12:00  (1 hours)
 9:00 - 10:00  (1 hours)
10:00 - 12:00  (2 hours)
11:00 - 13:00  (2 hours)
 9:00 - 13:00  (4 hours)

或者从开始时间开始?

 9:00 - 10:00
 9:00 - 13:00
10:00 - 12:00
11:00 - 13:00
11:00 - 12:00

或者从开始时间开始,然后是持续时间?

 9:00 - 10:00  (1 hours)
 9:00 - 13:00  (4 hours)
10:00 - 12:00  (2 hours)
11:00 - 12:00  (1 hours)
11:00 - 13:00  (2 hours)

或者到结束时间,然后是持续时间?

 9:00 - 10:00  (1 hours)
11:00 - 12:00  (1 hours)
10:00 - 12:00  (2 hours)
11:00 - 13:00  (2 hours)
 9:00 - 13:00  (4 hours)

正如您所看到的,没有一个明确的定义&#34;自然排序&#34;,这是Comparable定义的:

  

此接口对实现它的每个类的对象强加一个总排序。此排序称为类自然排序,类的compareTo方法称为自然比较方法