首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

自个儿编写HashCodeBuilder类

2012-11-05 
自己编写HashCodeBuilder类jakarta-commons-lang已经实现了HashCodeBuilder类,据闻在Hibernate中出错,所以

自己编写HashCodeBuilder类
jakarta-commons-lang已经实现了HashCodeBuilder类,据闻在Hibernate中出错,所以还是选择了自己实现,编码思想来源于 Effective java 一书。而且0依赖。

java 代码?

  1. import?java.lang.reflect.Array;??
  2. ??
  3. public?class?HashCodeBuilder?{??
  4. ????public?HashCodeBuilder()?{??
  5. ??
  6. ????}??
  7. ??
  8. ????private?int?result?=?17;??
  9. ??
  10. ????public?HashCodeBuilder?append(boolean?field)?{??
  11. ????????result?=?37?*?result?+?(field???1?:?0);??
  12. ????????return?this;??
  13. ????}??
  14. ??
  15. ????public?HashCodeBuilder?append(byte?field)?{??
  16. ????????result?=?37?*?result?+?(int)?field;??
  17. ????????return?this;??
  18. ????}??
  19. ??
  20. ????public?HashCodeBuilder?append(char?field)?{??
  21. ????????result?=?37?*?result?+?(int)?field;??
  22. ????????return?this;??
  23. ????}??
  24. ??
  25. ????public?HashCodeBuilder?append(short?field)?{??
  26. ????????result?=?37?*?result?+?(int)?field;??
  27. ????????return?this;??
  28. ????}??
  29. ??
  30. ????public?HashCodeBuilder?append(int?field)?{??
  31. ????????result?=?37?*?result?+?field;??
  32. ????????return?this;??
  33. ????}??
  34. ??
  35. ????public?HashCodeBuilder?append(long?field)?{??
  36. ????????result?=?37?*?result?+?(int)?(field?^?(field?>>>?32));??
  37. ????????return?this;??
  38. ????}??
  39. ??
  40. ????public?HashCodeBuilder?append(float?field)?{??
  41. ????????result?=?37?*?result?+?Float.floatToIntBits(field);??
  42. ????????return?this;??
  43. ????}??
  44. ??
  45. ????public?HashCodeBuilder?append(double?field)?{??
  46. ????????append(Double.doubleToLongBits(field));??
  47. ????????return?this;??
  48. ????}??
  49. ??
  50. ????public?HashCodeBuilder?append(Object?field)?{??
  51. ????????if(field?==?null)??
  52. ????????????result?=?0;??
  53. ????????else?if?(field.getClass().isArray())?{??
  54. ????????????for?(int?i?=?Array.getLength(field)?-?1;?i?>=?0;?i--)?{??
  55. ????????????????append(Array.get(field,?i));??
  56. ????????????}??
  57. ????????}?else??
  58. ????????????append(field.hashCode());??
  59. ????????return?this;??
  60. ????}??
  61. ??
  62. ????public?int?toHashCode()?{??
  63. ????????return?result;??
  64. ????}??
  65. ??????
  66. ????@Override??
  67. ????public?int?hashCode()?{??
  68. ????????return?result;??
  69. ????}??
  70. ??????
  71. ????@Override??
  72. ????public?String?toString()?{??
  73. ????????return?String.valueOf(result);??
  74. ????}??
  75. ??
  76. }??



测试代码

java 代码?
  1. public?class?MyBean?{??
  2. ????Long?id;??
  3. ????String?name;??
  4. ????char[]?chars;??
  5. ????public?MyBean(Long?id,?String?name,?char[]?chars)?{??
  6. ????????super();??
  7. ????????this.id?=?id;??
  8. ????????this.name?=?name;??
  9. ????????this.chars?=?chars;??
  10. ????}??
  11. ??????
  12. ????@Override??
  13. ????public?int?hashCode()?{??
  14. ????????return?new?HashCodeBuilder().append(id)??
  15. ????????????????????.append(name).append(chars).hashCode();??
  16. ????}??
  17. ??????
  18. ????public?static?void?main(String[]?args)?{??
  19. ????????MyBean?bean1?=?new?MyBean(Long.valueOf(10),??
  20. ????????????????"名称",new?char[]{'a','b','c','d','e'});??
  21. ????????MyBean?bean2?=?new?MyBean(Long.valueOf(10),??
  22. ????????????????"名称",new?char[]{'a','b','c','d','e'});??
  23. ????????System.out.println("bean1.hashCode="+bean1.hashCode());??
  24. ????????System.out.println("bean2.hashCode="+bean2.hashCode());??
  25. ????}??
  26. }??
1 楼 v38 2007-03-14   <br/>
<strong>jasongreen 写道:</strong><br/>
<div class='quote_div'>jakarta-commons-lang已经实现了HashCodeBuilder类,据闻在Hibernate中出错,所以还是选择了自己实现,编码思想来源于 Effective java 一书。而且0依赖。<br/>
==========================</div>
<div class='quote_div'>jakarta-commons-lang已实现的HashCodeBuilder类的错误没有把我们给折磨死~</div>
<div class='quote_div'><br/>
<br/>
<br/>
<br/>
</div> 2 楼 jasongreen 2007-03-15   我没有用过common-lang,不是太清楚,我最近在写crazyPOJO的项目,通过Annotation标志value field,然后根据value field生成hashCode,生成equals,生成clone,生成toString,生成toXML,生成toJSON,进行中,今天已经实现了,hashCode和equals,clone等方法,一会上传,大家试用一下

热点排行