[cal10n-dev] Congratulations on a useful project; here's my suggestion

Ceki Gulcu ceki at qos.ch
Tue Sep 1 15:27:45 CEST 2009



Rick Beton wrote:
>     Moreover, you could implement hashCode as follows, which correct and
>     efficient at the same time. Having args contribute to the hashCode
>     is a waste of time.
> 
>      @Override
>      public int hashCode() {
>        return e.hashCode();
>      }
> 
> 
> That's probably better (simpler often means better), but now hashCode() 
> and equals() have different behaviour so there ought to be a remark in 
> the JavaDoc to say so.  It could, for example, mean that a hashtable of 
> instances may be less efficient because more linear searching might happen.

No, they do not have different behavior. Both methods act according to their 
respective contracts. Keep in mind that in a typical hashtable the actual size 
of the table is much smaller than the hash space. Thus, it is *perfectly* OK for 
hash values to collide from time to time.  Not only is the simpler hashCode 
implementation simpler, it will also be faster in computing its result. Since 
occasional hash collisions are OK, the overall results are likely to be better 
as well. As I said, having args contribute to the hashCode is a waste of the 
code reader/reviewer's time as well as CPU cycles. (If unconcinved, write a 
small test case comparing the performance of the two variants.)

>     How about renaming ResourceMessage as MessageParameterObj. See also
> 
>      http://www.refactoring.com/catalog/introduceParameterObject.html
> 
> 
> I see from the Git patch email you've already done this.  :-D

Indeed, but I am open to suggestions.

-- 
Ceki Gülcü
Logback: The reliable, generic, fast and flexible logging framework for Java.
http://logback.qos.ch


More information about the cal10n-dev mailing list