Java中重写equals方法有哪些潜在陷阱?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1935个文字,预计阅读时间需要8分钟。
重写Java对象类的equals方法封装equals方法请遵守约定什么情况下要覆盖equals方法易于违反的对称性不易察觉的递归性质覆盖equals请遵守通用约定看似封装equals方法实际上来看似乎是一件平凡的事
重写java object类的equals方法
- 覆盖equals方法请遵守约定
- 什么情况下要覆盖equals方法
- 容易违反的对称性
- 不易察觉的传递性
覆盖equals请遵守通用约定
似乎覆盖equals方法看起来似乎是一件平常甚至极其简单的事情,
但是有许多覆盖方式会导致错误,并且会表现出超出预期的行为,
而有可能数小时也无法找到错误的位置。(比如说把参数改成了非Object类型)
1. 类的每一个实例在本质上都是唯一的
( 从内存的角度来讲是这样的),对于代表活动而不是值(value)的类来说更是如此,
例如Thread。
Object提供equals的实现对于这些类来说是正确的行为
2. 类没有必要提供“逻辑相等”的测试功能
3.超类已经覆盖了equals方法,超类的行为对于子类来说同样也是合适的
4.类是私有的或者是包级私有的,可以确定它的equals方法永远不会被外界调用
如果非常想规避风险,可以覆盖equals方法,
来确保来自Object或者超类的方法永远不会被意外调用。
本文共计1935个文字,预计阅读时间需要8分钟。
重写Java对象类的equals方法封装equals方法请遵守约定什么情况下要覆盖equals方法易于违反的对称性不易察觉的递归性质覆盖equals请遵守通用约定看似封装equals方法实际上来看似乎是一件平凡的事
重写java object类的equals方法
- 覆盖equals方法请遵守约定
- 什么情况下要覆盖equals方法
- 容易违反的对称性
- 不易察觉的传递性
覆盖equals请遵守通用约定
似乎覆盖equals方法看起来似乎是一件平常甚至极其简单的事情,
但是有许多覆盖方式会导致错误,并且会表现出超出预期的行为,
而有可能数小时也无法找到错误的位置。(比如说把参数改成了非Object类型)
1. 类的每一个实例在本质上都是唯一的
( 从内存的角度来讲是这样的),对于代表活动而不是值(value)的类来说更是如此,
例如Thread。
Object提供equals的实现对于这些类来说是正确的行为
2. 类没有必要提供“逻辑相等”的测试功能
3.超类已经覆盖了equals方法,超类的行为对于子类来说同样也是合适的
4.类是私有的或者是包级私有的,可以确定它的equals方法永远不会被外界调用
如果非常想规避风险,可以覆盖equals方法,
来确保来自Object或者超类的方法永远不会被意外调用。

