在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。让您的方法的用户知道他们应该期望哪些异常是很好的。

08-07 05:56