为了账号安全,请及时绑定邮箱和手机立即绑定

什么时候一个类应该是可比的和/或比较的?

什么时候一个类应该是可比的和/或比较的?

烙印99 2019-07-10 10:12:26
什么时候一个类应该是可比的和/或比较的?我见过实现这两种功能的类。可比和比较器..这是什么意思?我为什么要用一个而不是另一个?
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

以下文字来自比较器与可比

可比

一个可比较的对象能够将自己与另一个对象进行比较。类本身必须实现java.lang.Comparable接口,以便能够比较其实例。

比较器

比较器对象能够比较两个不同的对象。这个类不是比较它的实例,而是比较其他类的实例。此比较器类必须实现java.util.Comparator接口。


查看完整回答
反对 回复 2019-07-10
?
隔江千里

TA贡献1906条经验 获得超10个赞

实施Comparable意思是“我可以把自己和另一个物体比较一下。“当有一个自然的默认比较时,这通常是有用的。

实施Comparator意思是“我可以比较另外两个物体。“当有多种方法比较一种类型的两个实例时,这通常是有用的-例如,您可以按年龄、姓名等对人进行比较。


查看完整回答
反对 回复 2019-07-10
?
哔哔one

TA贡献1854条经验 获得超8个赞

可以让类实现自己的比较:

  • 在里面

    同一班

    (这往往是一种优势)
  • 有可能

    只有一个实现

    (所以如果你想要两个不同的案例,你就不能用这个)

相比之下,比较器是一种外部比较:

  • 它通常在一个唯一的实例中(无论是在同一个类中还是在另一个地方)。
  • 你,你们

    列出每个实现的名称

    用你想要处理的方式
  • 您可以提供比较器

    无法控制的类。

  • 实现是

    即使第一个对象为空,也是可用的。


在这两种实现中,您仍然可以选择你想要被比较的东西..使用泛型,您可以声明它,并让它在编译时检查.这提高了安全性,但确定适当的值也是一个挑战。

作为指导原则,我通常使用最通用的类或接口来比较该对象,在我设想的所有用例中.不过,定义并不十分精确!

  • Comparable<Object>

    允许您在编译时在所有代码中使用它(如果需要,这是好的,如果不是,则使用不好的代码);您的实现必须处理对象,并按需要进行强制转换,但要以健壮的方式进行转换。
  • Comparable<Itself>

    恰恰相反是非常严格的。

有趣的是,当子类本身变成子类时,子类也必须是可比较的,并且在这方面必须是健壮的(否则会破坏Liskov原则,并给出运行时错误)。


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 419 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信