【问题标题】:Is it a good idea to throw an Unchecked Exception for bad configuration?为错误的配置抛出未经检查的异常是个好主意吗?
【发布时间】:2014-12-05 09:00:46
【问题描述】:

我的应用程序使用了一个配置文件,其中包含许多可配置项。

例如,您可以使用自定义别名指定自定义密钥库以用于 WebService 连接(而不是默认的 JVM javax.net.ssl.keystore)。

在运行期间,我们可能会发现密钥库中不存在此别名,因此我们可能想要抛出异常。因为这是应用程序的关键部分(在配置修复之前,我们不能指望应用程序正常运行),我认为在这里抛出 Unchecked Exception 是个好主意。

我这样想对吗?

在这种情况下创建自定义ConfigurationException(扩展RuntimeException)是否有意义?

【问题讨论】:

    标签: java exception runtime unchecked


    【解决方案1】:

    抛出检查的异常是为了通知你的方法的用户该方法可以抛出一个特定的异常。这样用户就可以决定当我们遇到异常时该怎么做。

    如果您的要求是“除非配置正确,否则应用程序不应继续”并且没有用户可以运行的方法来规避它(在 try-catch 块中),那么我看不出有任何理由将其设为已检查异常(明知道没用,为什么还要让用户做不必要的工作)。

    所以,在这种情况下,我也会选择 unchecked Exception。

    【讨论】:

    • 感谢您的回复。你会使用默认的RuntimeException 还是创建一个扩展的自定义异常,专门指向配置?
    • 我会去定制......(我不是回答的人,但我支持答案)
    • 我会选择自定义,因为它会提供更好的控制。
    【解决方案2】:

    我认为您应该创建一个已检查的异常,当您捕获它时,在显示消息或其他内容后在 catch 块中结束程序。未经检查的异常用于编程错误,应由开发人员更正。检查异常是针对可能发生但我们无法控制的情况。您知道配置文件可能已损坏,但您无法阻止它发生并且无法控制它。我会选择检查异常。

    【讨论】:

      【解决方案3】:

      未经检查的异常表示程序中的错误或系统错误。例如,ArrayIndexOutOfBoundsExceptionNullPointerException 不应出现在程序中,如果出现,通常表示存在错误。

      验证用户输入时,无论是直接用户输入还是通过配置文件的用户输入,异常并不表示存在错误。因此它应该是一个已检查的异常,以提醒调用您的方法的程序员,异常不太可能发生并且必须被捕获。通过捕获异常,您可以生成指向解决方案的用户友好的错误消息。 (您不希望最终用户看到 Java 生成的 Exception in thread ... 消息!)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多