我一直试图生成一个TreeMap<Interval, Set<Object>>
来存储年龄分组中的人物实体,其中Interval
描述了年龄组的边界。我尝试这样做时出现以下错误。
java.lang.ClassCastException: org.joda.time.Interval cannot be cast to java.lang.Comparable
为Interval
交换DateTime
效果很好,但必须将地图的密钥用作输入才能创建Interval
。
为什么Joda Interval
没有可比性?
答案 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
方法称为自然比较方法