假设我有一个名为的抽象父类(super class),其定义如下:
public abstract class Member implements Comparable<Member>
然后我有 Member
的两个子类,定义如下:
public class Coach extends Member
public class Player extends Member
然后,我有一个列表 Member
,这意味着它同时包含 Coach
和Player
.
我需要对这个列表进行排序,其中教练总是排在第一位,然后是按标识号排序的球员。
我需要实现compareTo
方法来做到这一点。但是,知道我无法在父类(super class) Member
中实现该方法,我该如何继续? ,因为标识号是 Player
的属性和Coach
没有吗?
我希望我已经清楚地说明了这个问题。
最佳答案
这里有几个选项:
- 在
Member
上编写一个compareTo
方法,并编写一个比较器来检查成员对象是否是Coach的实例(然后它将始终位于其他成员
对象)。
在这个解决方案中,但是您假设基类会知道它的实现者,这可能被认为是一个糟糕的设计,因为一旦您开始引入更多实现类(即 Referee
、Technical Assistant
等)您每次都需要更改方法,并且最终可能会得到非常复杂的结果。
另一方面,尽管您在一个地方拥有完整的排序控制,但这比......更容易测试和推理
- 或者使用
getOrderingIndicator()
抽象方法扩展成员,您将在Player
(分配标识号)和Coach
中实现该方法>(分配 0 或低于允许的玩家识别号的其他值)并在Member
类的compareTo
方法中使用此抽象方法。
在此解决方案中,您将保证将来有任何 Member
基类的实现,它们都将被正确排序。
总而言之,我强烈建议在成员级别实现 compareTo
,因为它是您要比较的 Member
对象。
关于java - 对作为父类(super class)的子类的对象的父类(super class)列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24233554/