Playing with new compiler

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Thu Jun 2 01:26:01 PDT 2011


On 02/06/11 09:24, Maurizio Cimadamore wrote:
> On 02/06/11 04:52, Ali Ebrahimi wrote:
>> Hi Maurizio,
>> Is not this ambiguous?
> This one should - but your original example contained a cast to 
> Object, which made the first candidate inapplicable.
>
My bad, I missed the last line in your email. This is another problem in 
your original example (so there seem to be 2 of them).

Maurizio
> Maurizio
>>
>> call(#{ x ->  System.out.println(x);  return null; }); //prints
>> "SAM1" ?????
>> Candidates:  SAM<R,A>, SAM1
>>     static interface SAM1 {
>>          String m1(Integer n);
>>     }
>>
>>      static interface SAM<R,A>  {
>>          R m(A n);
>>     }
>>
>> Best Regards,
>> Ali Ebrahimi
>>
>> On Wed, Jun 1, 2011 at 7:44 PM, Maurizio Cimadamore 
>> <maurizio.cimadamore at oracle.com 
>> <mailto:maurizio.cimadamore at oracle.com>> wrote:
>>
>>     Hi Ali,
>>     the following looks problematic [the lambda expression is void
>>     compatible, so it should not be possible to convert it to a SAM
>>     descriptor returning String. The rest looks good to me (including
>>     the message that says 'cyclic inference'). We are discussing as
>>     to whether, in cases of cyclic inference, inference variables
>>     should be instantiated eagerly or not (i.e. to Object) so that
>>     method applicability check can continue. For now, the compiler is
>>     conservative, and does not attempt to attribute a lambda body
>>     until the type of the lambda parameters are fully known/inferred.
>>
>>     Maurizio
>>
>>
>>     On 25/05/11 08:21, Ali Ebrahimi wrote:
>>
>>         call(#{ x ->  System.out.println(x);});    /* compile :
>>         reference to call is ambiguous, both method call(SAM1) in
>>         AMBTest and
>>         method call(SAM2) in AMBTest match
>>
>>
>>
>



More information about the lambda-dev mailing list