【发布时间】:2018-03-28 20:23:18
【问题描述】:
Comparable 接口仅包含一个方法compareTo(T o),例如Collections.sort() 方法首先将比较对象类型转换为Comparable,然后进行比较。
现在我无法理解为什么我们首先需要这个过程。直接调用对象的compareTo()方法,去掉Comparable接口不是更简单吗?如果对象没有compareTo() 方法,它无论如何都会引发错误,就像对象没有实现Comparable 接口时一样。
此外,我看不出需要Comparable 类型对象的原因。拥有Comparable 接口有什么好处吗?
【问题讨论】:
-
如果对象没有实现 Comparable 接口,你有什么保证即使有
compareTo()方法? -
您是否建议
Object应该包含compareTo方法?如果是这样,你会如何比较一个数据库和一个数据库? -
这个想法是在编译时检测问题,而不是在运行时检测。如果您以某种方式滥用泛型(例如使用原始类型),Collections.sort 只会在运行时抛出 ClassCastException
-
值得指出的是
Comparable不是必要的:您可以使用兼容的Comparator实例来代替。Comparable用于具有自然排序概念的类。
标签: java interface casting comparable