gpt4 book ai didi

Java 7 Checked 异常规则

转载 作者:行者123 更新时间:2023-12-03 22:54:16 28 4
gpt4 key购买 nike

我知道有关已检查异常的规则,但我无法完全解决这个难题。为什么第二种方法不能编译,而第一种方法可以?错误是最后一个 throws 语句中的“Unhandled exception type Exception”。我能理解为什么会出现这个错误,但是我不明白为什么第一种方法没问题,它应该有同样的问题?!​​

eclipse 和 intellij 都显示相同的错误。

import java.util.concurrent.Callable;

public class ThrowableWeirdness {

public void doWithMetrics(String name, Runnable runnable) {

try {
runnable.run();
} catch (Throwable e) {
System.out.printf(name + ".failed");
throw e;
}
}

public <RET> RET doWithMetrics(String name, Callable<RET> runnable) {

try {
return runnable.call();
} catch (Throwable e) {
System.out.printf(name + ".failed");
throw e; // Compilation error on this line: unhandled exception
}
}
}

你能解释一下这两种方法的区别吗?

最佳答案

  • 在第一种情况下,runnable.run 不会抛出任何已检查的Exception,因此您的try/catch 并不会推断出 rethrow 会抛出任何已检查的内容,因此它可以编译
  • 在第二种情况下,runnable.call() 抛出 Exception 并得到处理,但随后又被重新抛出。

为了修复这种情况下的编译问题,您必须在您的方法声明中添加一个throws 语句。

关于Java 7 Checked 异常规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24204824/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com