Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该何时重写java.lang.Object方法?_Java - Fatal编程技术网

我应该何时重写java.lang.Object方法?

我应该何时重写java.lang.Object方法?,java,Java,在什么情况下,我应该开始考虑推翻 clone() equals() finalize() hashCode() toString() 其中一些问题有一些明显的、有点具体的答案,但我更想知道的是,在一般情况下,实施它们会被认为是良好的实践。通常我遵循以下原则:始终至少覆盖equals()和toString()(甚至可能是clone())如果您正在创建的软件将被其他人使用(如API或其他) 如果只是为了个人的小事情,我至少会制作一个toString(),因为它们非常方便,但这一切都取决于你:程序

在什么情况下,我应该开始考虑推翻

  • clone()
  • equals()
  • finalize()
  • hashCode()
  • toString()

其中一些问题有一些明显的、有点具体的答案,但我更想知道的是,在一般情况下,实施它们会被认为是良好的实践。

通常我遵循以下原则:始终至少覆盖
equals()
toString()
(甚至可能是
clone()
)如果您正在创建的软件将被其他人使用(如API或其他)

如果只是为了个人的小事情,我至少会制作一个
toString()
,因为它们非常方便,但这一切都取决于你:程序员。

clone()

如果希望以简单的方式复制对象,请实现

许多人不鼓励使用
clone()
,建议改用复制构造函数。例如,见


等于()

如果需要比较两个实例是否相等,请执行

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


hashCode()

实现对象是否将用作
HashMap
(或类似)中的键,或插入
HashSet
(或类似)中

通常,如果实现
equals()
,则始终实现是一个好主意


toString()

通常实现以使调试更容易,特别是当对象将插入到集合中时

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


finalize()

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


资源拥有类应该实现。

我认为,因为大多数java对象都实现java.lang.Object类,所以您可能希望扩展这个子类。但是,如果您有一个具有不同实现的新java类型,您可以实现它。@user7790438在java中创建的每个对象都继承自object类,这是无法避免的。然而,这些方法的Java默认实现基本上是无用的。几乎你制作的每个类都有一个“不同的实现”。哇,太棒了!我不清楚是否应该或何时使用
finalize()
。还有
hashCode()
。谢谢