首先,这是一个学术问题,所以不要担心这种做法是否好。
我们假设我们有TreeSet<"Object">
,我们想用比较器实例化它。该比较器将返回通常的0,-1和1,但前提是两个对象是同一个类。因此,当对象属于不同的类并且比较它们没有意义时,比较器应该返回什么? -1还是1?或者比较合同是否要求我 在所有情况下指定订单,如果我不想抛出运行时异常?
答案 0 :(得分:2)
Comparator
必须指定它可能收到的所有可能值之间的顺序。您不能拥有两个可能属于Comparator
无法“处理”的数据结构的对象。如果比较它们没有意义,那就做出一个随意的决定。例如,如果它们不属于同一类,只需比较类名:
if (!a.getClass().equals(b.getClass()) {
return a.getClass().getName().compare(b.getClass().getName());
}