【发布时间】:2012-05-24 02:55:11
【问题描述】:
我的应用可能会比较同一抽象父类的任意两个子类的实例。我希望它们进行如下比较:
- 如果它们是不同的子类,则应由父类进行比较。
- 如果它们是同一个子类,则子类应该进行比较。
类将通过 TreeMap 进行比较,因此我可以选择使用 Comparator 或实现 Comparable(或两者兼而有之?)。
我可以想到几种方法来做到这一点,但它们都有些混乱且容易出错。有没有优雅的解决方案?
提前谢谢...
【问题讨论】:
-
“类将通过 Treemap 进行比较”是什么意思?
-
既然提到了 Comparable 和 Comparator,我们是否可以假设比较的结果具有所有三种可能性——“小于”、“大于”和“等于”?如果比较甚至排除了这些选项之一的可能性,那么您不应该使用这些接口。
-
你的意思是通过反射比较类吗?比如每个类有哪些方法和属性?
-
这是一个非常困难的任务,因为 compare() 的约定强加了传递性:如果 b1 > b2(与 B 子类比较),如果 a > b1(与基类比较),那么你必须有 a > b2 (与基类比较)。鉴于基类比较对子类比较一无所知,这很难实现。
-
@JBNizet - 虽然我认为 OP 的想法不一定是一个伟大的想法,但只要您的子类排序始终是“子比较”,我认为保持传递性并不困难的超类排序。
标签: java