j.l.r.Parameter.hashCode() question

Remi Forax forax at univ-mlv.fr
Fri Oct 4 11:56:22 PDT 2013


On 10/04/2013 07:14 PM, Joe Darcy wrote:
> Hello Elena,
>
> On 10/04/2013 03:49 AM, elena votchennikova wrote:
>> Hi Joe,
>>
>> thank you for the replay,
>>
>> On 04.10.2013 5:03, Joseph Darcy wrote:
>>> Hello Elena,
>>>
>>> The general requirements from Object.hashCode hold: equal objects 
>>> must have equal hash codes. (Of necessity, unequal objects may have 
>>> the same hash code.)
>> Yep.
>>>
>>> The phrased "based on" means "some unspecified function of." It is 
>>> generally undesirable to exactly specify a hash code function when 
>>> you don't absolutely have to.
>> So, do you mean that the executable and the index are just used in 
>> this "unspecified function" or do you want to say that if the 
>> executable and the index are same, then the hash codes will be the same?
>>
>> I just want to clarify it, because if the answer is "yes" then I 
>> think this is not obviously from the wording "based on". And if the 
>> answer is "no", that this is Ok.
>> But in the spec to the equals() method we have the same wording: 
>> "Compares based on the executable and the index.". But what does this 
>> exactly mean?
>>
>>
>> Thank you for your help,
>> Elena
>
> It it implicit that the hashCode and equals mehtods on Parameter 
> follow the general hashCode and equals contract.
>
> Equality is based on executable and index; I don't think it is helpful 
> to write specification that is equivalent to the implementation of
>
>         if(obj instanceof Parameter) {
>             Parameter other = (Parameter)obj;
>             return (other.executable.equals(executable) &&
>                     other.index == index);
>         }
>         return false;

It's unrelated to the current discussion but if the code is effectively 
this one,
may I suggest an improvement, given that && is lazy, it's better to test 
the index first
and then test the executable if needed.

>
> We do not want to specify the hash function; it is sufficient to say 
> it takes the executable and index as inputs.
>
> Cheers,
>
> -Joe

cheers,
Rémi



More information about the enhanced-metadata-spec-discuss mailing list