196. 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? Everybody knows the answer … we can throw an unchecked exception such as RuntimeException
:
static void readFiles(List<Path> paths) {
paths.forEach(p -> {
try {
readFile(p);
} catch (IOException e) {
throw new RuntimeException(e);
}
});
}
Also, everybody knows that we cannot throw a checked exception such as 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 hack that allows us to throw checked...