Effective java经验之谈,通用方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Effective java经验之谈,通用方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1560字,纯文字阅读大概需要3分钟。
内容图文
对于通用方法,其实应用的场景是比较多的,我们在写一个类的时候,就要考虑是否要编写该方法的通用方法。这使得我们为以后该类的扩展性与使用方面提供很大的便利。
1. 覆盖equals时请遵守通用约定。自反性,对称性,传递性,一致性,非空性。编写子类equals的方法的时候,可以考虑是否可以用复合,不使用继承来解决问题。Instanceof进行参数检测,如果参数null,也将返回false。
2. 覆盖equals时总要覆盖hashCode。
1.对象属性不变化,返回的hashcode永远相等。
2.如果对象通过equals方法比较是相等的,那么调用这两个对象中任意一个对象的hashcode产生同样的结果
3.对象的equals方法比较不相等,这两个对象任意的hashcode不一样
设计equals()
[1]使用instanceof操作符检查“实参是否为正确的类型”。
[2]对于类中的每一个“关键域”,检查实参中的域与当前对象中对应的域值。
[2.1]对于非float和double类型的原语类型域,使用==比较;
[2.2]对于对象引用域,递归调用equals方法;
[2.3]对于float域,使用Float.floatToIntBits(afloat)转换为int,再使用==比较;
[2.4]对于double域,使用Double.doubleToLongBits(adouble)转换为int,再使用==比较;
[2.5]对于数组域,调用Arrays.equals方法。
设计hashCode()
[1]把某个非零常数值,例如17,保存在int变量result中;
[2]对于对象中每一个关键域f(指equals方法中考虑的每一个域):
[2.1]boolean型,计算(f ? 0 : 1);
[2.2]byte,char,short型,计算(int);
[2.3]long型,计算(int) (f ^ (f>>>32));
[2.4]float型,计算Float.floatToIntBits(afloat);
[2.5]double型,计算Double.doubleToLongBits(adouble)得到一个long,再[2.3];
[2.6]对象引用,递归调用它的hashCode方法;
[2.7]数组域,对其中每个元素调用它的hashCode方法。
[3]将上面计算得到的散列码保存到int变量c,然后执行 result=37*result+c;
[4]返回result。
3.始终要覆盖toString方法。只有覆盖这个方法,其他例如Arrays.toString(),以及集合类的toString。当你某一个调用该类输出的时候,就会调用该类已经实现的toString。
4.谨慎的调用clone方法。当你为一个继承而设计的类的时候,如果无法提供安全受保护的clone,那么子类就不可能实现Cloneable,因为子类实现需要调用父类的clone。Clone方法中对可变引用对象的copy可以通过递归clone完成。总结来说,对于clone不直接使用,而采用拷贝构造器以及拷贝工厂的方案来代替他。即入参和返回都是同类。
5.考虑实现Comparable接口。对于该接口的约定参考着equals。该接口指出了实现类的内在排序,实现该接口的类,可以参与排序算法[Collections.sort()等]。可以利用该接口的约定简略代码,返回值正负与0,并不关心值是多少。
像博主这么逗比的人还有吗?
(卖萌吗?)
原文:http://blog.csdn.net/supera_li/article/details/45034203
内容总结
以上是互联网集市为您收集整理的Effective java经验之谈,通用方法全部内容,希望文章能够帮你解决Effective java经验之谈,通用方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。