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