我什么时候应该重写java.lang.Object方法?

时间:2017-05-31 01:51:43

标签: java

在什么情况下我应该开始考虑覆盖

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

其中一些有一些明显的,有些具体的答案,但我想知道更多的一般条件,它会考虑实施它们的良好做法。

2 个答案:

答案 0 :(得分:3)

<强> clone()

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

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

<强> equals()

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

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

<强> hashCode()

实现if对象将在HashMap(或类似)中用作键,或插入HashSet(或类似)。

如果您实施equals()

通常是一个好主意

<强> toString()

通常实现使调试更容易,特别是如果将对象插入集合中。

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

<强> finalize()

从不。没有代码应该依赖finalize()进行资源清理,因为无法保证何时,甚至是否会被调用。

资源拥有类应该实现AutoCloseable

答案 1 :(得分:0)

一般来说,我遵循以下原则:如果您创建的软件将被使用,则始终至少覆盖equals()toString()(甚至可能clone())其他人(如API或其他东西)。

如果只是为了个人小事,我至少会成为toString()因为它们非常方便,但这完全取决于你:程序员。