jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Dürig <mdue...@apache.org>
Subject Re: [jr3 Microkernel] equals() not symmetric
Date Fri, 10 Feb 2012 13:10:32 GMT

On 10.2.12 11:00, Ard Schrijvers wrote:
> On Fri, Feb 10, 2012 at 11:41 AM, Stefan Guggisberg
> <stefan.guggisberg@gmail.com>  wrote:
>> On Thu, Feb 9, 2012 at 11:45 PM, Michael Dürig<mduerig@apache.org>  wrote:
>>>
>>> Hi,
>>>
>>> I stumbled upon this by chance: The equals method for the classes
>>> ChildNodeEntriesMap and ChildNodeEntry is not symmetric.
>>
>> hmm, i am pretty sure they're symmetric, i.e.: a.equals(b) == b.equals(a)
>
> They look symmetric to me as well. Unless you refer to the Bucket innerclass
>
> ChildNodeEntriesMap#Bucket : This one has an invalid equals method
> breaking symmetry : Using super.equals in an equals implementation
> almost always breaks symmetry

BTW, AFIK the only way to get equals() right wrt. sub-typing is to use a 
double dispatch through a second helper method. Quite similar to the 
visitor pattern.

Michael

>
> Regards Ard
>
>>
>> or are you referring to the missing hashCode() override?
>> i admit that i've been lazy since those internal objects are not
>> intended to be used as keys for hash tables and sorts.
>>
>> but you're probably right, it doesn't hurt to implement them :)
>>
>> cheers
>> stefan
>>
>>> This will most
>>> certainly lead to subtle bugs later on.
>>>
>>> Michael
>
>
>

Mime
View raw message