Sunday December 29, 2002
commons-lang just made it easier I got some advice from Max Anderson (via hibernate-devel mailing list) for implementing the following methods in a BaseObject class for my hibernate objects (or any objects FTM):
public boolean equals(Object o) {
return EqualsBuilder.reflectionEquals(this, o);
}
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
public int hashCode(Object o) {
return HashCodeBuilder.reflectionHashCode(this);
}
Boy, that sure makes things easier, huh? Especially when you compare the toString() method to my old one:
public String toString() {
StringBuffer results = new StringBuffer();
Class clazz = getClass();
results.append(getClass().getName() + "\n");
Field[] fields = clazz.getDeclaredFields();
try {
AccessibleObject.setAccessible(fields, true);
for (int i = 0; i < fields.length; i++) {
results.append("\t" + fields[i].getName() + "=" +
fields[i].get(this) + "\n");
}
} catch (Exception e) {
// ignored!
}
return results.toString();
}
They both use reflection, but my old one might catch security excaptions. The Javadocs for HashCodeBuilder warn us about this problem:
Alternatively, there is a method that uses reflection to determine the fields to test. Because these fields are usually private, the method, reflectionHashCode, uses Field.setAccessible to change the visibility of the fields. This will fail under a security manager, unless the appropriate permissions are set. It is also slower than testing explicitly.
I'll be using these on Tomcat and I'll let you know if I run into any problems.
Posted in Java
at Dec 29 2002, 09:19:52 AM MST
Add a Comment
Search This Site
Recent Entries
- Secure JSON Services with Play Scala and SecureSocial
- My What's New in Spring 3.1 Presentation
- Twitter's Open Source Summit: Bootstrap 2.0 Edition
- Refreshing AppFuse's UI with Twitter Bootstrap
- 2011 - A Year in Review
- Upgrading AppFuse to Spring Security 3.1 and Spring 3.1
- What have I been working on at Taleo?
- Our Engaging Trip to Paris and Antwerp
- My HTML5 with Play Scala, CoffeeScript and Jade Presentation from Devoxx 2011
- Deploying Java and Play Framework Apps to the Cloud with James Ward