在
Java中,双重方法有什么区别?
public void methodA() throws AnException { //do something throw new AnException(); } public void methodA() { //do the same thing throw new AnException(); }
我有一个直觉,它与一个精心设计的方法有关(因为我将methodA放在一个接口中,它被声明为methodA *在实现中的方式,并从Java接收到一个警告,“A *不能覆盖A,因为A *不抛出异常“).
这个猜测是否正确?
两种做事方式有其他微妙的内涵吗?
解决方法
如果AnException是被检查的异常(换句话说,如果它不扩展RuntimeException),那么methodA将不会被编译.检查的异常必须始终被拒绝.
如果AnException是一个未经检查的异常(如果扩展了RuntimeException),那么可以由java编译器允许,也可以由java运行时等效地解释.在这种情况下,方法A仍然可能仍然是首选,因为文档的原因.您的方法的javadoc将显示它可能会抛出AnException.让你的方法的用户知道他们应该期望的异常是很好的.