Lambda and intersection types

Boaz Nahum boaznahum at gmail.com
Mon Nov 12 12:01:41 PST 2012


Yes, but should it be valid code ?

If yes, I2 implements both I1 & I2 or just I2 ?

Thanks
Boaz



On Mon, Nov 12, 2012 at 9:55 PM, Brian Goetz <brian.goetz at oracle.com> wrote:

> The back-end work for intersection-typed lambdas is not implemented
> yet...only the compiler front-end work.
>
>
> On 11/12/2012 2:45 PM, Boaz Nahum wrote:
>
>> The follwing simple code ...
>>
>> ==============================**======
>> interface I1 {void f();}
>>
>> interface I2 {
>>
>>      void printMe()default { System.out.println("I2");}
>>
>>      void f();
>> }
>>
>> public static void main(String[] args) {
>>
>>          I2 i2 = (I1 & I2) () -> {};
>>
>>          System.out.println( "i2 is I2=" + (i2 instanceof I2));
>>
>>          i2.printMe();
>>      }
>> ==============================**===
>> Output is:
>>
>> ------------------------------**-------
>> i2 is I2=false
>> Exception in thread "main" java.lang.**IncompatibleClassChangeError:
>> Class
>> question.lambda_intersection_**types.Q$$Lambda$2 does not implement the
>> requested interface question.lambda_intersection_**types.I2
>> ------------------------------**-------
>>
>> What is the correct behavior ?
>>
>>


More information about the lambda-dev mailing list