gpt4 book ai didi

java - 我什么时候应该覆盖 java.lang.Object 方法?

转载 作者:行者123 更新时间:2023-11-30 07:54:08 25 4
gpt4 key购买 nike

在什么情况下我应该开始考虑覆盖以下任何方法?

  • 克隆()
  • 等于()
  • finalize()
  • hashCode()
  • toString()

其中一些有一些明显的、有些具体的答案,但我更想知道在哪些一般条件下实现它们会被认为是良好做法。

最佳答案

克隆()

如果您想要一种简单的方法来复制对象,请实现。

许多人不鼓励使用 clone() 并建议改用复制构造函数。例如。见Clone() vs Copy constructor- which is recommended in java .


equals()

如果您需要比较两个实例是否相等,请实现。

如果对象将用作 HashMap(或类似的)中的键,或插入到 HashSet(或类似的)中,则为必需。强烈推荐在 TreeXxx 变体中使用,以与 compareTo() 兼容,即如果类实现 Comparable .


hashCode()

如果对象将用作 HashMap(或类似的)中的键,或插入到 HashSet(或类似的)中,则实现。

如果您实现了 equals(),通常来说总是一个好主意。


toString()

通常实现使调试更容易,尤其是当对象将被插入到集合中时。

如果对象具有简单的文本表示,并且您希望能够在不调用方法(例如 getName()getDescription())的情况下输出它,则实现。


finalize()

从来没有。任何代码都不应依赖 finalize() 进行资源清理,因为无法保证何时或什至会调用它。

拥有资源的类应该实现 AutoCloseable相反。

关于java - 我什么时候应该覆盖 java.lang.Object 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44274406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com