Inferring that what exceptions are thrown from a lambda

Stuart Marks stuart.marks at
Wed Sep 4 13:11:11 PDT 2013

On 8/31/13 11:04 AM, Esko Luontola wrote:
> But if the lambda doesn't thrown anything, the compiler thinks that the
> method may throw the most generic exception. The following code fails to
> compile with "error: unreported exception Throwable; must be caught or
> declared to be thrown"
>       public void doesNotCompile() {
>           String result = Resilient.tryRepeatedly(10, () -> "result");
>       }

A change to support this went in fairly recently. This now compiles for 
me using JDK 8 b105. It fails with the error you mention when using 
older builds, e.g., JDK 8 b88, which is one I happened to have lying 
around. (Note, I am referring to JDK 8 builds, not Lambda builds.)

I believe that if a lambda throws no checked exceptions, and its 
functional interface method is declared "throws E", then E is now 
inferred to be RuntimeException.


More information about the lambda-dev mailing list