java - Java 库最佳实践中的抛出异常

标签 java jar exception

我正在开发一个用于数据库访问的 JAR 库。我首先捕获了在 try block 中发现的所有异常并处理它们。 但后来,我认为它会更好,因为它是一个将异常抛给最终程序员以捕获它并进行处理的库。

关于处理 JAR 文件中的异常的最佳实践是什么?

以下是我的 JAR 中的示例代码,如您所见,抛出了很多异常。这是一个好的做法还是有更好的方法? (就像定义一个新的自定义异常;如果是这样,它是如何完成的?) 非常感谢与此相关的任何帮助。

 public static NConnection getNConnection(String path) throws IOException, ParserConfigurationException, SAXException {

    NConfigurations conf = new NConfigurations();
    conf.setConfigurationLoc(path);
    String dbPath = conf.getDatabasePath();
    return createConnection(dbPath);
}

最佳答案

这个问题没有简单的答案,社区在某种程度上不确定什么是真正的最佳实践。简而言之,如果您想强制调用者处理出现问题的情况/给他一个从这种异常状态中恢复的机会,您可以使用已检查的异常使用运行时异常用于任何其他情况,例如违反契约(Contract)等编程错误。

在我看来,最好的做法是任何库都扩展自己的异常类,即使它只是包装原始异常。这样 - 作为客户 - 我可以阅读堆栈跟踪并轻松发现我的代码的哪一部分出了问题。例如。如果有一个 DBFrameworkException 它比常见的 NullPointerException 更清楚。

另见 Bloch's Effective Java item 58 关于这个主题的一些很好的解释。

关于java - Java 库最佳实践中的抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29533992/

相关文章:

java - 如何获取运行桌面应用程序的 JAR 的名称?

java - 使用 ProcessBuilder 在 Jar 中运行可执行文件

java - 线程中的异常 "AWT-EventQueue-0"java.lang.ClassCastException : java. util.ArrayList

c# - Prism 模块级异常处理

c# - 使用反射调用 DLL,但所需的另一个 DLL 抛出异常

java - 如何使用 JUnit 对时间相关方法进行单元测试

java - 如何序列化正在同步的代码?

grails - 如何在Grails中获取所有与插件相关的JAR?

Java,从 DOM 获取带标签的文本内容,按照浏览器显示的顺序

在 Android 中监视 LinkedList 时出现 java.lang.AbstractMethodError