【发布时间】:2015-02-20 19:04:34
【问题描述】:
代码
class TestException extends Exception {
}
interface Task<E extends Exception> {
void call() throws E;
}
public class TaskPerformer {
/** performs a task in the proper context, rethrowing any exceptions the task declares */
private <E extends Exception> void perform(Task<E> task) throws E {
beforeTask();
try {
task.call();
} finally {
afterTask();
}
}
private void afterTask() {
// implementation elided (does not matter)
}
private void beforeTask() {
// implementation elided (does not matter)
}
public static void main(String[] args) {
new TaskPerformer().perform(() -> { // compilation error
try {
throw new TestException();
} catch (TestException e) {
return;
}
});
}
}
被eclipse编译器拒绝并报错
未处理的异常类型TestException
在 main 的第一行,即使 lambda 表达式处理了这个异常(对吗?)。
这是一个编译器错误,还是我忽略了什么?
【问题讨论】:
-
似乎是
Eclipse中的一个错误。 jdk 编译你的代码没有问题。 -
@Holger,这里的结果与 Oracle JDK 1.8.0_31 相同。 Meriton,你检查过 Eclipse 中打开的错误吗?
-
FWIW IntelliJ 没有出现这个问题
-
@beresfordt:afaik,IntelliJ 使用
javac,所以它应该表现出相同的行为。只有Eclipse有自己的编译器。 -
在 IntelliJ 的编辑器窗口中,您仍然会偶尔发现编译错误,但实际上编译没有问题
标签: java eclipse lambda java-8 type-inference