Latest build c572fa185d05 limitations

Howard Lovatt howard.lovatt at gmail.com
Sun Sep 12 13:38:12 PDT 2010


It is odd that Integer works and int doesn't, the programmer will expect that they are interchangeable. Even stranger is that:

  il.forEach( #( int i ) {
    if ( i < 4 ) { throw new Exception(); }
    return i * i;
  } );

Works (note argument is an int). 

  -- Howard Lovatt +61 419 971 263 (sent from my PDA)

On 11/09/2010, at 10:22 PM, Maurizio Cimadamore <maurizio.cimadamore at oracle.com> wrote:

> The problem has nothing to do with try/catch - it is caused by using 'int' as explicit type - if you replace it with Integer it works...
> 
> Thanks for the report.
> Maurizio
> 
> On 11/09/10 06:18, Howard Lovatt wrote:
>> Hi,
>> 
>> Using my usual source:
>> 
>>     143: final IntList11 il = new IntList11();
>>     144: out.println( il );
>>     145: il.forEach( #( int i ) { 2 * i } ); // No exception; no try
>> block - needs type parameter
>>     146: out.println( il );
>> 
>> Gives:
>> 
>> Exception in thread "main" java.lang.VerifyError: Bad local variable
>> type in method lambdas.Main$9.call(Ljava/lang/Integer;)Ljava/lang/Integer;
>> at offset 1
>>    at lambdas.Main.exceptionTransparency(Main.java:145)
>>    at lambdas.Main.main(Main.java:24)
>> 
>> But:
>> 
>>     try {
>>       il.forEach( #( int i ) {
>>         if ( i<  4 ) { throw new Exception(); }
>>         return i * i;
>>       } ); // Need to catch the checked exception!
>>     } catch ( final Throwable notUsed ) {
>>       out.println( "Exception caught 1" );
>>     }
>>     out.println( il );
>> 
>> Works!
>> 
>> And:
>> 
>>   il.forEach( #( i ) { 2 * i } );
>> 
>> Requires a try catch block (as before) and:
>> 
>>   il.forEach( #( Integer i ) { 2 * i } );
>> 
>> Works.
>> 
>> Great to see such regular updates into the repository,
>> 
>>   -- Howard.
>> 
>>   
> 


More information about the lambda-dev mailing list