在Java中,twin方法有什么区别?
public void methodA() throws AnException {
//do something
throw new AnException();
}
public void methodA() {
//do the same thing
throw new AnException();
}
我有一个直觉,它与设计良好的方法有关(因为我将methodA放在接口(interface)中,声明了methodA *在其实现中的方式,并从Java收到警告,“A *无法覆盖A,因为A *不会引发AnException”)。
这种猜测正确吗?
两种做事方式还有其他微妙的含义吗?
最佳答案
如果AnException是一个检查异常(换句话说,如果它不扩展RuntimeException),则methodA将不会编译。必须始终排除已检查的异常。
如果AnException是未经检查的异常(如果它确实扩展了RuntimeException),则Java编译器将允许其中之一,而Java运行时将等效地对其进行解释。
出于文档原因,在这种情况下,仍然可能仍然首选methodA。您的方法的Javadoc将显示它可能会引发AnException。让您的方法的用户知道他们应该期望哪些异常是很好的。