什么时候班级应该是Comparable和/或Comparator?
我见过实现Comparable和Comparator的类 。 这是什么意思? 为什么我会用另一种呢?
下面的文本来自Comparator vs Comparable
可比
一个可比较的对象能够将自己与另一个对象进行比较。 类本身必须实现java.lang.Comparable
接口,以便能够比较它的实例。
比较
比较对象能够比较两个不同的对象。 该类不是比较它的实例,而是一些其他类的实例。 这个比较器类必须实现java.util.Comparator
接口。
实现Comparable
意味着“我可以将自己与另一个对象进行比较。” 当有一个自然的默认比较时,这通常很有用。
实现Comparator
意味着“我可以比较两个其他对象。” 当有多种方法比较两个类型的实例时,这通常很有用 - 例如,您可以根据年龄,名称等比较人们。
Comparable让一个类实现自己的比较:
相比之下,比较器是一个外部比较:
在这两种实现中,你仍然可以选择你想要比较的东西 。 有了泛型,你可以声明,并在编译时检查它。 这提高了安全性,但确定适当的价值也是一个挑战。
作为一个指导原则,我通常使用最常用的类或接口,可以在所有使用情况下比较该对象的可能性......但不是非常精确的定义! :-(
Comparable<Object>
可让您在编译时在所有代码中使用它(如果需要,这是很好的选择,如果不是,那么您就可以避免编译时错误); 你的实现必须处理对象,并根据需要进行强制转换,但强大。 Comparable<Itself>
非常严格。 有趣的是,当你把它自己子类化到子类时,子类必须也是可比较的并且对它很有帮助(否则它会破坏Liskov原理,并给你运行时错误)。
链接地址: http://www.djcxy.com/p/91925.html