java - 方法重载和抛出异常处理

标签 java methods overloading throws

假设我有以下代码:

public void methodOne(String argumentOne) {
    methodOne(argumentOne, false);
}

public void methodOne(String argumentOne, boolean equality) {
    //App logic here
}

如果应用程序逻辑抛出异常(例如 IllegalArgumentException/Parse Exception),并且我想在调用者方法中捕获此异常,则应该在所有方法标识符中添加“抛出 IllegalArgumentException”还是仅在基本方法中添加“抛出 IllegalArgumentException”标识符?相比之下有什么优势吗?

最佳答案

抛出已检查的异常意味着您希望调用者被迫考虑如何处理该异常。您应该只在以下情况下执行此操作:

  • 这是您深思熟虑的、理想的行为。
  • 您知道调用者如何处理已检查的异常。理想情况下,您已经记录了您希望他们对异常执行的操作。

因此这是一个非常糟糕的主意

  • 声明“抛出”一个从未实际抛出的异常。这只会造成困惑,并使开发人员养成忽略异常的习惯,因为它们没有值(value)。
  • 当不太可能是从异常中恢复的合理方法时抛出已检查异常。在这种情况下,未经检查的异常可能会更好。

我更喜欢为未经检查的异常添加 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?

仅将其添加到实际可以抛出异常的方法中。

关于java - 方法重载和抛出异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53701387/

相关文章:

java - 无法加载 JDBC 领域的组

python - 加法表达式的顺序在 Python 中重要吗?

java - 为什么 Guava 的 ImmutableList 有这么多重载的 of() 方法?

java - 如何按首字母分隔的字母顺序对 JTable 进行排序? [请看图片以了解详情]

Java 匹配字符串的最佳方式是什么?

java - 如何覆盖包装类中的方法?

java - 从方法返回 "void"或 "null"

c++ - 如何在基类指针 vector 的元素上应用重载的多态函数

inheritance - VB6在子类中访问父类的重载接口(interface)子程序

java - Android 检查值是否等于数组中的值