Exceptions and lambda.

Srikanth S Adayapalam srikanth_sankaran at in.ibm.com
Tue Feb 5 22:41:03 PST 2013


> From: Dan Smith <daniel.smith at oracle.com>
> Subject: Re: Exceptions and lambda.
> 
> If you're getting an error from the lambda expression, that's the 
> expected behavior.  Perhaps the error message could be improved, 
though...
> 
> This is not actually an exception problem: we simply don't allow 
> lambda expressions to have type parameters.  There's no syntax to 
> introduce them, and if we inferred the declaration (something we 
> thought about), it would be impossible or very confusing to talk 
> about the type variable (e.g., give the lambda parameter an explicit 
type).

I understand the part about there being no syntax to introduce type
variables, but with types elided and inferred, the snippet I posted
constitutes a well formed program as far I can see - we are working
with a particular instance of type that meets the bounds criteria
specified by the interface method and it is surprising that I cannot 
simply throw that object - I apologize if this was discussed earlier 
and I missed the discussion. 

> The implication is that the only way to instantiate a functional 
> interface that has a generic method (well, excluding the boring 
> approach of declaring a class) is to use a method reference.

So, should I expect the following to fail to compile ? It compiles
fine with b74:

// ----
interface G1 { 
   <E extends Exception> Object m(E p) throws E; 
 } 
 interface G2 { 
   <F extends Exception> String m(F q) throws Exception; 
 } 
 interface G extends G1, G2 {} 
 
 // G has descriptor <F extends Exception> ()->String throws F 
 
 public class X { 
 
         G g = (x) -> {
                 return "OK";
         }; 
 } 
// ---


More information about the lambda-spec-observers mailing list