我知道关于检查异常的规则,但我无法完全解决这个问题。为什么第二种方法不能编译,但第一种方法呢?最后一个throws语句中的错误是“未处理的异常类型异常”。我可以理解为什么我得到这个错误,但我不明白为什么第一种方法可以,它应该有同样的问题?!Java 7检查异常规则
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
}
}
}
你能解释两种方法的区别吗?
第一种方法在我的Eclipse上都不能编译...你确定你没有忘记在方法签名中抛出一些'Throwable'? – sp00m
是的,同样在这里,两种方法都会给出无用的异常错误。 –
奇怪。我使用Java 7,也许这有所作为。第一种方法定义编译,也运行! –