203. Throwing checked exceptions from lambdas
Let’s suppose that we have the following lambda:
static void readFiles(List<Path> paths) { paths.forEach(p -> { try { readFile(p); } catch (IOException e) { ... // what can we throw here? } }); } What can we throw in the catch block? Most of you will know the answer; we can throw an unchecked exception such as a RuntimeException:
static void readFiles(List<Path> paths) { paths.forEach(p -> { try { readFile(p); } catch (IOException e) { throw new RuntimeException(e); } }); } Also, most people know that we cannot throw a checked exception such as an IOException. The following snippet of code will not compile:
static void readFiles(List<Path> paths) { paths.forEach(p -> { try { readFile(p); } catch (IOException e) { throw new IOException(e); } }); } Can we change this rule? Can we come up with a...