在什么情况下我应该开始考虑覆盖
clone()
equals()
finalize()
hashCode()
toString()
其中一些有一些明显的,有些具体的答案,但我想知道更多的一般条件,它会考虑实施它们的良好做法。
答案 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()
因为它们非常方便,但这完全取决于你:程序员。