On 09/Oct/2009 06:28, Ramana Polavarapu wrote: > It appears that Bloch suggests that we should have the following first: > if (!(object instanceof CredOwner)) return false; > Then, we can skip this check: > if (object instanceof CredOwner)
That is pretty much what Jesse wrote. Ok you inverted the instance check...but it is equivalent in performance and behavior @Override public boolean equals(Object object) { if (object == this) { return true; } if (!(object instanceof CredOwner)) { return false; } CredOwner that = (CredOwner) object; return principalClass.equals(that.principalClass) && principalName.equals(that.principalName); } Regards, Tim > -----Original Message----- > From: Jesse Wilson [mailto:jessewil...@google.com] > Sent: Friday, October 09, 2009 9:00 AM > To: dev@harmony.apache.org > Subject: Re: svn commit: r823222 - > /harmony/enhanced/classlib/trunk/modules/auth/src/main/java/common/javax/sec > urity/auth/PrivateCredentialPermission.java > > On Thu, Oct 8, 2009 at 9:31 AM, <odea...@apache.org> wrote: > >> Add null check to equals() method. > > > > // Checks two CredOwner objects for equality. >> @Override >> public boolean equals(Object obj) { >> + if (obj == null) { >> + return false; >> + } >> return principalClass.equals(((CredOwner) obj).principalClass) >> && principalName.equals(((CredOwner) >> obj).principalName); >> } >> > > > Does Harmony have a standard idiom for equals methods? I don't think the > equals() method above is particularly awesome. It can throw > ClassCastExceptions and performs extra casts. > > As a straw man suggestion, I propose the following control flow as our > standard idiom: > > @Override public boolean equals(Object object) { > if (object == this) { > return true; > } > if (object instanceof CredOwner) { > CredOwner that = (CredOwner) object; > return principalClass.equals(that.principalClass) > && principalName.equals(that.principalName); > } > return false; > } > > > It seems like a natural performance, correctness and consistency win to > figure out a good way to implement equals() and hashCode(), and then to do > that everywhere in the project. > > Of course, we would first prefer to be consistent with the RI, such as > implementing equals to spec when it is specified (as in Set.java) or not at > all for reference types like AtomicInteger. > > Comments? > >