本问题已经有最佳答案,请猛点这里访问。
假设我有以下代码:
public void methodOne(String argumentOne) {
methodOne(argumentOne, false);
}
public void methodOne(String argumentOne, boolean equality) {
//App logic here
}
如果app逻辑抛出异常(比如IllegalArgumentException / Parse Exception),并且我想在调用方法中捕获它,是否应该在所有方法标识符中添加"throws IllegalArgumentException"或仅在基本方法标识符上添加? 这有什么优势吗?
IllegalArgumentException是RuntimeException因此,它不需要声明为抛出。
很酷,未经检查的异常怎么样,如ParseException或Evaluation Exception P.S:让我也改变问题中的描述。
ParseException是一个经过检查的例外。 您可以将其声明为抛出,也可以在方法块中捕获它。
您应该在公共接口方法的JavaDocs中记录抛出行为。 特殊情况下的行为是方法合同的一部分,就像哪些值作为输入有效一样。
@MohanKrishnan RuntimeExceptions是未选中的例外....
抛出已检查的异常意味着您希望调用者被迫考虑如何处理该异常。你应该只在以下情况下这样做:
这是你心中刻意的,理想的行动。
您已经知道如何期望调用者处理已检查的异常。理想情况下,您已记录了您希望他们对异常执行的操作。
因此,这是一个非常糟糕的主意
声明"抛出"一个从未实际抛出的异常。这只会引起混淆,并让开发人员习惯于忽略您的异常,因为它们没有任何价值。
当不可能以合理的方式从中恢复时,抛出一个已检查的异常。在这种情况下,未经检查的异常可能会更好。
我更喜欢为未经检查的异常添加throws子句,作为记录可能出错的内容以及它意味着什么而不强制调用者处理这些异常的形式。
此外,您应该尝试向每个异常/错误添加有意义的消息,以便开发人员更容易找出如何修复代码或配置。
i would like to catch this in the caller method, should the"throws IllegalArgumentException" be added in all the method identifier or only on the base method identifier?
只将它添加到实际抛出异常的方法中。