Java Doc for HashCodeBuilder.java in  » Library » Apache-common-lang » org » apache » commons » lang » builder » Java Source Code / Java DocumentationJava Source Code and Java Documentation

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » Library » Apache common lang » org.apache.commons.lang.builder 
Source Cross Reference  Class Diagram Java Document (Java Doc) 


java.lang.Object
   org.apache.commons.lang.builder.HashCodeBuilder

HashCodeBuilder
public class HashCodeBuilder (Code)

Assists in implementing Object.hashCode methods.

This class enables a good hashCode method to be built for any class. It follows the rules laid out in the book Effective Java by Joshua Bloch. Writing a good hashCode method is actually quite difficult. This class aims to simplify the process.

All relevant fields from the object should be included in the hashCode method. Derived fields may be excluded. In general, any field used in the equals method must be used in the hashCode method.

To use this class write code as follows:

 public class Person {
 String name;
 int age;
 boolean smoker;
 ...
 public int hashCode() {
 // you pick a hard-coded, randomly chosen, non-zero, odd number
 // ideally different for each class
 return new HashCodeBuilder(17, 37).
 append(name).
 append(age).
 append(smoker).
 toHashCode();
 }
 }
 

If required, the superclass hashCode() can be added using HashCodeBuilder.appendSuper .

Alternatively, there is a method that uses reflection to determine the fields to test. Because these fields are usually private, the method, reflectionHashCode, uses AccessibleObject.setAccessible to change the visibility of the fields. This will fail under a security manager, unless the appropriate permissions are set up correctly. It is also slower than testing explicitly.

A typical invocation for this method would look like:

 public int hashCode() {
 return HashCodeBuilder.reflectionHashCode(this);
 }
 

author:
   Stephen Colebourne
author:
   Gary Gregory
author:
   Pete Gieser
since:
   1.0
version:
   $Id: HashCodeBuilder.java 447989 2006-09-19 21:58:11Z ggregory $



Constructor Summary
public  HashCodeBuilder()
    

Uses two hard coded choices for the constants needed to build a hashCode.

public  HashCodeBuilder(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber)
    

Two randomly chosen, non-zero, odd numbers must be passed in.


Method Summary
public  HashCodeBuilderappend(boolean value)
    

Append a hashCode for a boolean.

This adds iConstant * 1 to the hashCode and not a 1231 or 1237 as done in java.lang.Boolean.

public  HashCodeBuilderappend(boolean[] array)
    

Append a hashCode for a boolean array.

public  HashCodeBuilderappend(byte value)
    

Append a hashCode for a byte.

public  HashCodeBuilderappend(byte[] array)
    

Append a hashCode for a byte array.

public  HashCodeBuilderappend(char value)
    

Append a hashCode for a char.

public  HashCodeBuilderappend(char[] array)
    

Append a hashCode for a char array.

public  HashCodeBuilderappend(double value)
    

Append a hashCode for a double.

public  HashCodeBuilderappend(double[] array)
    

Append a hashCode for a double array.

public  HashCodeBuilderappend(float value)
    

Append a hashCode for a float.

public  HashCodeBuilderappend(float[] array)
    

Append a hashCode for a float array.

public  HashCodeBuilderappend(int value)
    

Append a hashCode for an int.

public  HashCodeBuilderappend(int[] array)
    

Append a hashCode for an int array.

public  HashCodeBuilderappend(long value)
    

Append a hashCode for a long.

public  HashCodeBuilderappend(long[] array)
    

Append a hashCode for a long array.

public  HashCodeBuilderappend(Object object)
    

Append a hashCode for an Object.

public  HashCodeBuilderappend(Object[] array)
    

Append a hashCode for an Object array.

public  HashCodeBuilderappend(short value)
    

Append a hashCode for a short.

public  HashCodeBuilderappend(short[] array)
    

Append a hashCode for a short array.

public  HashCodeBuilderappendSuper(int superHashCode)
    

Adds the result of super.hashCode() to this builder.

static  SetgetRegistry()
    

Returns the registry of objects being traversed by the reflection methods in the current thread.

static  booleanisRegistered(Object value)
    

Returns true if the registry contains the given object.

public static  intreflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object)
    

This method uses reflection to build a valid hash code.

It uses AccessibleObject.setAccessible to gain access to private fields.

public static  intreflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object, boolean testTransients)
    

This method uses reflection to build a valid hash code.

It uses AccessibleObject.setAccessible to gain access to private fields.

public static  intreflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object, boolean testTransients, Class reflectUpToClass)
     Calls HashCodeBuilder.reflectionHashCode(int,int,Object,boolean,Class,String[]) with excludeFields set to null.
public static  intreflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object, boolean testTransients, Class reflectUpToClass, String[] excludeFields)
    

This method uses reflection to build a valid hash code.

It uses AccessibleObject.setAccessible to gain access to private fields.

public static  intreflectionHashCode(Object object)
    

This method uses reflection to build a valid hash code.

This constructor uses two hard coded choices for the constants needed to build a hash code.

It uses AccessibleObject.setAccessible to gain access to private fields.

public static  intreflectionHashCode(Object object, boolean testTransients)
    

This method uses reflection to build a valid hash code.

This constructor uses two hard coded choices for the constants needed to build a hash code.

It uses AccessibleObject.setAccessible to gain access to private fields.

public static  intreflectionHashCode(Object object, Collection excludeFields)
    

This method uses reflection to build a valid hash code.

This constructor uses two hard coded choices for the constants needed to build a hash code.

It uses AccessibleObject.setAccessible to gain access to private fields.

public static  intreflectionHashCode(Object object, String[] excludeFields)
    

This method uses reflection to build a valid hash code.

This constructor uses two hard coded choices for the constants needed to build a hash code.

It uses AccessibleObject.setAccessible to gain access to private fields.

static  voidregister(Object value)
    

Registers the given object.

public  inttoHashCode()
    

Return the computed hashCode.

static  voidunregister(Object value)
    

Unregisters the given object.



Constructor Detail
HashCodeBuilder
public HashCodeBuilder()(Code)

Uses two hard coded choices for the constants needed to build a hashCode.




HashCodeBuilder
public HashCodeBuilder(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber)(Code)

Two randomly chosen, non-zero, odd numbers must be passed in. Ideally these should be different for each class, however this is not vital.

Prime numbers are preferred, especially for the multiplier.


Parameters:
  initialNonZeroOddNumber - a non-zero, odd number used as the initial value
Parameters:
  multiplierNonZeroOddNumber - a non-zero, odd number used as the multiplier
throws:
  IllegalArgumentException - if the number is zero or even




Method Detail
append
public HashCodeBuilder append(boolean value)(Code)

Append a hashCode for a boolean.

This adds iConstant * 1 to the hashCode and not a 1231 or 1237 as done in java.lang.Boolean. This is in accordance with the Effective Java design.


Parameters:
  value - the boolean to add to the hashCode this



append
public HashCodeBuilder append(boolean[] array)(Code)

Append a hashCode for a boolean array.


Parameters:
  array - the array to add to the hashCode this



append
public HashCodeBuilder append(byte value)(Code)

Append a hashCode for a byte.


Parameters:
  value - the byte to add to the hashCode this



append
public HashCodeBuilder append(byte[] array)(Code)

Append a hashCode for a byte array.


Parameters:
  array - the array to add to the hashCode this



append
public HashCodeBuilder append(char value)(Code)

Append a hashCode for a char.


Parameters:
  value - the char to add to the hashCode this



append
public HashCodeBuilder append(char[] array)(Code)

Append a hashCode for a char array.


Parameters:
  array - the array to add to the hashCode this



append
public HashCodeBuilder append(double value)(Code)

Append a hashCode for a double.


Parameters:
  value - the double to add to the hashCode this



append
public HashCodeBuilder append(double[] array)(Code)

Append a hashCode for a double array.


Parameters:
  array - the array to add to the hashCode this



append
public HashCodeBuilder append(float value)(Code)

Append a hashCode for a float.


Parameters:
  value - the float to add to the hashCode this



append
public HashCodeBuilder append(float[] array)(Code)

Append a hashCode for a float array.


Parameters:
  array - the array to add to the hashCode this



append
public HashCodeBuilder append(int value)(Code)

Append a hashCode for an int.


Parameters:
  value - the int to add to the hashCode this



append
public HashCodeBuilder append(int[] array)(Code)

Append a hashCode for an int array.


Parameters:
  array - the array to add to the hashCode this



append
public HashCodeBuilder append(long value)(Code)

Append a hashCode for a long.


Parameters:
  value - the long to add to the hashCode this



append
public HashCodeBuilder append(long[] array)(Code)

Append a hashCode for a long array.


Parameters:
  array - the array to add to the hashCode this



append
public HashCodeBuilder append(Object object)(Code)

Append a hashCode for an Object.


Parameters:
  object - the Object to add to the hashCode this



append
public HashCodeBuilder append(Object[] array)(Code)

Append a hashCode for an Object array.


Parameters:
  array - the array to add to the hashCode this



append
public HashCodeBuilder append(short value)(Code)

Append a hashCode for a short.


Parameters:
  value - the short to add to the hashCode this



append
public HashCodeBuilder append(short[] array)(Code)

Append a hashCode for a short array.


Parameters:
  array - the array to add to the hashCode this



appendSuper
public HashCodeBuilder appendSuper(int superHashCode)(Code)

Adds the result of super.hashCode() to this builder.


Parameters:
  superHashCode - the result of calling super.hashCode() this HashCodeBuilder, used to chain calls.
since:
   2.0



getRegistry
static Set getRegistry()(Code)

Returns the registry of objects being traversed by the reflection methods in the current thread.

Set the registry of objects being traversed
since:
   2.3



isRegistered
static boolean isRegistered(Object value)(Code)

Returns true if the registry contains the given object. Used by the reflection methods to avoid infinite loops.


Parameters:
  value - The object to lookup in the registry. boolean true if the registry contains the given object.
since:
   2.3



reflectionHashCode
public static int reflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object)(Code)

This method uses reflection to build a valid hash code.

It uses AccessibleObject.setAccessible to gain access to private fields. This means that it will throw a security exception if run under a security manager, if the permissions are not set up correctly. It is also not as efficient as testing explicitly.

Transient members will be not be used, as they are likely derived fields, and not part of the value of the Object.

Static fields will not be tested. Superclass fields will be included.

Two randomly chosen, non-zero, odd numbers must be passed in. Ideally these should be different for each class, however this is not vital. Prime numbers are preferred, especially for the multiplier.


Parameters:
  initialNonZeroOddNumber - a non-zero, odd number used as the initial value
Parameters:
  multiplierNonZeroOddNumber - a non-zero, odd number used as the multiplier
Parameters:
  object - the Object to create a hashCode for int hash code
throws:
  IllegalArgumentException - if the Object is null
throws:
  IllegalArgumentException - if the number is zero or even



reflectionHashCode
public static int reflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object, boolean testTransients)(Code)

This method uses reflection to build a valid hash code.

It uses AccessibleObject.setAccessible to gain access to private fields. This means that it will throw a security exception if run under a security manager, if the permissions are not set up correctly. It is also not as efficient as testing explicitly.

If the TestTransients parameter is set to true, transient members will be tested, otherwise they are ignored, as they are likely derived fields, and not part of the value of the Object.

Static fields will not be tested. Superclass fields will be included.

Two randomly chosen, non-zero, odd numbers must be passed in. Ideally these should be different for each class, however this is not vital. Prime numbers are preferred, especially for the multiplier.


Parameters:
  initialNonZeroOddNumber - a non-zero, odd number used as the initial value
Parameters:
  multiplierNonZeroOddNumber - a non-zero, odd number used as the multiplier
Parameters:
  object - the Object to create a hashCode for
Parameters:
  testTransients - whether to include transient fields int hash code
throws:
  IllegalArgumentException - if the Object is null
throws:
  IllegalArgumentException - if the number is zero or even



reflectionHashCode
public static int reflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object, boolean testTransients, Class reflectUpToClass)(Code)
Calls HashCodeBuilder.reflectionHashCode(int,int,Object,boolean,Class,String[]) with excludeFields set to null.
Parameters:
  initialNonZeroOddNumber - a non-zero, odd number used as the initial value
Parameters:
  multiplierNonZeroOddNumber - a non-zero, odd number used as the multiplier
Parameters:
  object - the Object to create a hashCode for
Parameters:
  testTransients - whether to include transient fields
Parameters:
  reflectUpToClass - the superclass to reflect up to (inclusive), may be null int hash code



reflectionHashCode
public static int reflectionHashCode(int initialNonZeroOddNumber, int multiplierNonZeroOddNumber, Object object, boolean testTransients, Class reflectUpToClass, String[] excludeFields)(Code)

This method uses reflection to build a valid hash code.

It uses AccessibleObject.setAccessible to gain access to private fields. This means that it will throw a security exception if run under a security manager, if the permissions are not set up correctly. It is also not as efficient as testing explicitly.

If the TestTransients parameter is set to true, transient members will be tested, otherwise they are ignored, as they are likely derived fields, and not part of the value of the Object.

Static fields will not be included. Superclass fields will be included up to and including the specified superclass. A null superclass is treated as java.lang.Object.

Two randomly chosen, non-zero, odd numbers must be passed in. Ideally these should be different for each class, however this is not vital. Prime numbers are preferred, especially for the multiplier.


Parameters:
  initialNonZeroOddNumber - a non-zero, odd number used as the initial value
Parameters:
  multiplierNonZeroOddNumber - a non-zero, odd number used as the multiplier
Parameters:
  object - the Object to create a hashCode for
Parameters:
  testTransients - whether to include transient fields
Parameters:
  reflectUpToClass - the superclass to reflect up to (inclusive), may be null
Parameters:
  excludeFields - array of field names to exclude from use in calculation of hash code int hash code
throws:
  IllegalArgumentException - if the Object is null
throws:
  IllegalArgumentException - if the number is zero or even
since:
   2.0



reflectionHashCode
public static int reflectionHashCode(Object object)(Code)

This method uses reflection to build a valid hash code.

This constructor uses two hard coded choices for the constants needed to build a hash code.

It uses AccessibleObject.setAccessible to gain access to private fields. This means that it will throw a security exception if run under a security manager, if the permissions are not set up correctly. It is also not as efficient as testing explicitly.

Transient members will be not be used, as they are likely derived fields, and not part of the value of the Object.

Static fields will not be tested. Superclass fields will be included.


Parameters:
  object - the Object to create a hashCode for int hash code
throws:
  IllegalArgumentException - if the object is null



reflectionHashCode
public static int reflectionHashCode(Object object, boolean testTransients)(Code)

This method uses reflection to build a valid hash code.

This constructor uses two hard coded choices for the constants needed to build a hash code.

It uses AccessibleObject.setAccessible to gain access to private fields. This means that it will throw a security exception if run under a security manager, if the permissions are not set up correctly. It is also not as efficient as testing explicitly.

If the TestTransients parameter is set to true, transient members will be tested, otherwise they are ignored, as they are likely derived fields, and not part of the value of the Object.

Static fields will not be tested. Superclass fields will be included.


Parameters:
  object - the Object to create a hashCode for
Parameters:
  testTransients - whether to include transient fields int hash code
throws:
  IllegalArgumentException - if the object is null



reflectionHashCode
public static int reflectionHashCode(Object object, Collection excludeFields)(Code)

This method uses reflection to build a valid hash code.

This constructor uses two hard coded choices for the constants needed to build a hash code.

It uses AccessibleObject.setAccessible to gain access to private fields. This means that it will throw a security exception if run under a security manager, if the permissions are not set up correctly. It is also not as efficient as testing explicitly.

Transient members will be not be used, as they are likely derived fields, and not part of the value of the Object.

Static fields will not be tested. Superclass fields will be included.


Parameters:
  object - the Object to create a hashCode for
Parameters:
  excludeFields - Collection of String field names to exclude from use in calculation of hash code int hash code
throws:
  IllegalArgumentException - if the object is null



reflectionHashCode
public static int reflectionHashCode(Object object, String[] excludeFields)(Code)

This method uses reflection to build a valid hash code.

This constructor uses two hard coded choices for the constants needed to build a hash code.

It uses AccessibleObject.setAccessible to gain access to private fields. This means that it will throw a security exception if run under a security manager, if the permissions are not set up correctly. It is also not as efficient as testing explicitly.

Transient members will be not be used, as they are likely derived fields, and not part of the value of the Object.

Static fields will not be tested. Superclass fields will be included.


Parameters:
  object - the Object to create a hashCode for
Parameters:
  excludeFields - array of field names to exclude from use in calculation of hash code int hash code
throws:
  IllegalArgumentException - if the object is null



register
static void register(Object value)(Code)

Registers the given object. Used by the reflection methods to avoid infinite loops.


Parameters:
  value - The object to register.



toHashCode
public int toHashCode()(Code)

Return the computed hashCode.

hashCode based on the fields appended



unregister
static void unregister(Object value)(Code)

Unregisters the given object.

Used by the reflection methods to avoid infinite loops.
Parameters:
  value - The object to unregister.
since:
   2.3




Methods inherited from java.lang.Object
native protected Object clone() throws CloneNotSupportedException(Code)(Java Doc)
public boolean equals(Object obj)(Code)(Java Doc)
protected void finalize() throws Throwable(Code)(Java Doc)
final native public Class getClass()(Code)(Java Doc)
native public int hashCode()(Code)(Java Doc)
final native public void notify()(Code)(Java Doc)
final native public void notifyAll()(Code)(Java Doc)
public String toString()(Code)(Java Doc)
final native public void wait(long timeout) throws InterruptedException(Code)(Java Doc)
final public void wait(long timeout, int nanos) throws InterruptedException(Code)(Java Doc)
final public void wait() throws InterruptedException(Code)(Java Doc)

www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.