为什么它是一个"好主意"把你自己的异常?

在这里找到

有帮助吗?

解决方案

在一般情况下,这是完全没把你自己的例外情况。也许你是什么意思问的是"时,它不一定是一个好主意要把我自己的异常?"

一种情况是当你应该投掷的一个标准的例外。例如,如果方法需要一个文件的名称和应该返回了文件,你也许应该把你的平台的标准FileNotFoundException而不是扔PeanutPowersFileNotFoundException.如果你真要扔掉自己的一例外,你或许应该有它的扩展标准FileNotFoundException.

更新: 布洛克介绍了这一项目60的 有效的Java

其他提示

这不是。您应该创建并抛出自定义异常,只要你有一个特殊的情况。

它不提供它们从任何标准的基本异常类型衍生为(++的std ::例外在c或在Python异常,等等)

如果他们从正常基类型_aren't_derived,那么其他人可能无法追上他们时,他们正期待捕获所有异常 - 这将是一件坏事

这是没有错的创建自己的异常类型。然而,在通过创建自己的打算,你应该检查你的框架是否已经提供了一个适合的异常。

净设计准则

  

考虑抛出异常现有   居住在系统命名空间   而不是创建自定义异常   类型。

     

不要创建并抛出自定义异常   如果你有一个错误条件   可以在以编程方式处理   不同的方式比其他任何现有的   例外。否则,抛出的一个   现有的异常。

     

不要创建并抛出新的异常   正好有你的团队的异常。

我相信你可能会问,为什么它是一个糟糕的主意为再次引发例外。

所谓“重新抛出”,我的意思是捕获异常和比生成新的和投掷它。这可能是有问题的,因为你可能最终消耗的原始堆栈跟踪和松动该故障的所有上下文。

您不应该创造自己的类型异常的,除非你有一些额外的东西,你要添加的异常类型。

如果你想告诉你的API的用户,他们提供了一个无效的说法,你应该抛出一个ArgumentException,但如果你的库失败,因为一些库的具体原因,你不能在常规的异常表达,您应该推出自己的,让它包含开发人员所需要的信息。

要继续彼得响应另一种情况时抛出异常是不是一个好主意是,如果你使用抛出异常来控制你的程序的业务逻辑。

只要是抛出异常是由一个适当的对象派生,并输送只是 - 。特殊情况,抛出异常是完全可以接受的

使用抛出异常来控制除了业务逻辑是一个坏的设计图案还具有性能影响 - 投掷并且相比于从所述方法

根据结果分支返回捕获异常是相当昂贵

有没有错,创建自己的异常,它可以根据准确传达这是适合您的情况的信息。一个ConfigFileNotFoundException传达比FileNotFoundException更多信息(文件没发现?)。

不过,通过各种手段,确保你捕获并处理每一个自定义异常的的代码的内部。当异常飞到你的模块之外的一些地方(称之为包,把它命名空间),那些人在那里甚至不知道它的存在,更谈不上有什么用它做。除了一个catch (Throwable t) {/* whut? */}

要我看来,这个问题是捕捉经验的候选人试图伪装经验。没有什么错在我看来,抛出自己的异常是,正如你可以看到其他人是回答在这里。

这不是一个坏主意。如果特殊情况发生时,一个异常应该被抛出来处理它,特别是如果你正在设计其他人使用的代码,可能会收到错误的输入,等等。

这是一个坏主意,使用异常,他们是完全没有必要,比如是通过代码或正常执行的部分检查正常恢复,因为他们有很多与之相关的开销情况。我想这就是你可能得到的是他们在一般一个坏主意的想法。但对于他们的意思做的(标记你的代码是不具备处理的特殊情况),他们是绝对的最佳工具。

如果你这样做创建代码,其他人可能会使用自定义异常,不记录他们是什么,他们的意思。这样,以后你的代码的用户都会知道他们是可能的,他们的意思是如果他们出现,并能适当地处理它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top