equals and hashCode

Mark Thornton mthornton at optrak.com
Tue Oct 30 04:23:28 PDT 2012


On 30/10/12 11:15, Aleksey Shipilev wrote:
> On 10/26/2012 11:38 PM, Brian Goetz wrote:
>> Yes, it is decided: lambdas will inherit the implementation of
>> equals/hashCode from Object.  So, that means no relief for the use case
>> you are raising here.
> Just to clarify, because someone else was asking me this.
>
> 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;
>   Mapper mref1 = ((Integer)0)::compareTo;
>   Mapper mref2 = ((Integer)0)::compareTo;
>   Mapper mref3 = (new Integer(0))::compareTo;
>   Mapper mref4 = (new Integer(0))::compareTo;
>   Mapper smref1 = Integer::parseInt;
>   Mapper smref2 = Integer::parseInt;
>
> 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

Mark Thornton



More information about the lambda-dev mailing list