Comparator 可以比较两个不同类型的对象吗?

AKS*_*AKS 7 java comparator

我有两个类 Person 和 Employee 的对象。两个类都有共同的属性年龄。我已经将这两个类的几个对象添加到 Arraylist 中,现在我想要两个编写一个 Comparator 并将其传递给 Collections 类的 sort 方法。并希望根据年龄对列表进行排序。我正在尝试这样做只是为了更清楚地了解 Java 中 Comparable 和 Comparator 的使用。

编辑:我问这个问题的原因是我不清楚 Comparator 和 Comparable。我在某处读到如果 Class 实现 Comparable 那么它不能与其他类的对象进行比较(因为 Class cast 异常)。

现在,如果我在 Employee 和 Person 中创建关系,则不需要实现 Comparator (除非我想根据这些类的名称或其他公共属性进行排序)。

再一次,我问这个问题是为了更清楚地了解 Comparator 和 Comparable。

到目前为止,我能够理解的是,如果我想对多个参数进行排序,那么我应该实现 Comparator 并将其传递给 Collections.srot()。

或者,如果我无法控制正在排序的对象的类,那么自定义排序我应该实现 Comparator。(如果我错了或者我遗漏了什么,请纠正我)

编辑

我想现在我明白了 Comparable 和 Comparator 的使用。为了确保我得到了正确的概念,这是我的理解:如果我想比较不同类的两个对象(并且没有关系),那么我应该使用原始比较器并覆盖比较方法。有人会实现 Comparator 而不是 Comparable 的另一个原因是排序的灵活性。而我从自然排序中了解到的是 Class 在 CompareTo 方法中实现的逻辑。

希望我对所有这些观点都是正确的。

Laj*_*pad 5

您可以定义一个名为 Ageable 的接口,Employee 和 Person 可以实现该接口。您也可以定义一个具有相同效果的抽象类(并且 Employee 和 Person 将从抽象类继承)。请注意,出于这个原因,您也可以使用普通类,您可以做任何您需要的事情。

另外,如果没有理由说 Employee 不是 Person(例如机器人在办公室工作),那么 Employee 可以从 Person 继承。