概述
最近看了Effective Java这本书,感觉受益非浅。我把一些原则写了下来,希望能给大家一些帮助.
1.在改写equals的时候请遵守通用约定
在讨论这个问题的时候,先要确定下在什么时候要改写Object.equals.
当一个类有自己特有的“逻辑相等”概念,而且超类也没有改写equals以实现期望的行为,这时我们就
需要改写equals方法了。但在改写equals方法时,必须要遵守对equals的通用约定,否则,我们改写的类
将无法与其他类进行正常的工作,比较List,Map等集合方法,而且这种问题很难排查。
这些通用约定如下
1).自反性:对于任意的引用值x,x.equals(x)一定为true
2).对称性:对于任意的引用值x和y,当且仅当x.equals(y)返回true时,y.equals(x)也一定要返回true
3).传递性:对于任意的引用值x,y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么
x.equals(z)也一定返回true
4).一致性:对于任意的引用值x和y,如果用于equals比较的对象信息没有被修改的话,那么,多次调用x.equals(y)
要么一致地返回true,要么一致地返回false
5).对于任意的非空引用值x,x.equals(null)一定返回false.
这些约定来自于java.lang.Object规范,看了这些规范,是不是感觉到写equals都这么麻烦,还得要逐个看看是否
符合了这些规范,其实,这也并不难解决,只要下在的过程去实现equals方法,这些规范一般都会自然满足.
1)使用==操作符检查“实参是否为指向对象的一个引用”
2)使用instanceof操作符检查“实参是否为正确的类型”
3)把实参转换到正确的类型
4)对于该类中的每一个“关键”域,检查实参中的域与当前对象中对应的域值是否匹配
5)当你改写equals的时候,总是要改写hashCode (这条我会在后面讲到)
6)不要企图让equals方法过于聪明
7)不要使equals方法依赖于不可靠的资源
8)不要将equals声明中的Object对象替换为其他类型,也就是不要将equals(Object o)改为equals(MyClass c)
最后
以上就是爱笑香烟为你收集整理的java编程时要遵循的一些原则的全部内容,希望文章能够帮你解决java编程时要遵循的一些原则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复