Trouble inferring type of lambda
Howard Lovatt
howard.lovatt at gmail.com
Sat Aug 21 23:09:05 PDT 2010
For:
public interface Method1<R, A1, throws E> { public R call( A1 a1 ) throws E; }
and:
public <throws E> void forEach( final Method1<Integer, Integer, E>
method ) throws E { ... }
The compiler has trouble with:
il.forEach( #( i ) { throw new Exception(); } ); // Need to catch
checked exception
Giving:
lambdas/Main.java:34: method forEach in class IntList11 cannot be
applied to given types
il.forEach( #( i ) { throw new Exception(); } ); // Need to
catch checked exception
^
required: Method1<Integer,Integer,E>
found: #void(?)(Exception)
where E is a type-variable:
E extends Exception declared in method
<E>forEach(Method1<Integer,Integer,E>)
Qualifying doesn't help:
Method1<Integer, Integer, Exception> #( i ) { throw new Exception(); }
It gives:
lambdas/Main.java:34: incompatible types; no instance(s) of type
variable(s) ? exist so that #void(?)(Exception) conforms to
Method1<Integer,Integer,Exception>
il.forEach( Method1<Integer, Integer, Exception> #( i ) { throw
new Exception(); } ); // Need to catch checked exception
^
required: Method1<Integer,Integer,Exception>
found: #void(?)(Exception)
Is the problem that the return type isn't expressible? It isn't really
void, it is 'NeverReturns'.
-- Howard.
More information about the lambda-dev
mailing list