equals and hashCode

Ben Evans benjamin.john.evans at gmail.com
Tue Oct 30 04:42:19 PDT 2012


On Tue, Oct 30, 2012 at 11:23 AM, Mark Thornton <mthornton at optrak.com> wrote:
> On 30/10/12 11:15, Aleksey Shipilev wrote:
>>
>> That means lambdas inherit the default implementations of
>> equals/hashCode? It is as saying "you can't rely on equals()/hashCode()
>> for lambdas, since you are not in control of those". Although one can
>> piggyback on the factual behavior of lambdas, and we would have to
>> explicitly say when the lambdas are considered to be equal (or not). I.e.:
>>
>>   Mapper lam1 = (x) -> x + 1;
>>   Mapper lam2 = (x) -> x + 1;
>>
>> What are the expectations for equality? If we just inherit the default
>> equals/hashCode, I would expect:
>>
>>   assertEquals(lam1, lam1);     // true
>>   assertEquals(lam1, lam2);     // false
>
> I think that in this case the implementation is permitted but not
> required to return true, i.e. lam1 == lam2 is possible but not guaranteed

This is a terrible idea.

Implementation-defined behaviour of something as fundamental as an
equality operation is going to help no-one.

Ben


More information about the lambda-dev mailing list