我应该何时重写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()
。谢谢