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

Joe Darcy joe.darcy at oracle.com
Fri Oct 4 10:14:44 PDT 2013


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;

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

Cheers,

-Joe


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