无法对项目进行逻辑比较时的比较最佳做法

时间:2016-05-21 16:52:58

标签: java comparator

首先,这是一个学术问题,所以不要担心这种做法是否好。 我们假设我们有TreeSet<"Object">,我们想用比较器实例化它。该比较器将返回通常的0,-1和1,但前提是两个对象是同一个类。因此,当对象属于不同的类并且比较它们没有意义时,比较器应该返回什么? -1还是1?或者比较合同是否要求我 在所有情况下指定订单,如果我不想抛出运行时异常?

1 个答案:

答案 0 :(得分:2)

Comparator必须指定它可能收到的所有可能值之间的顺序。您不能拥有两个可能属于Comparator无法“处理”的数据结构的对象。如果比较它们没有意义,那就做出一个随意的决定。例如,如果它们不属于同一类,只需比较类名:

if (!a.getClass().equals(b.getClass()) {
    return a.getClass().getName().compare(b.getClass().getName());
}