重用库定义的异常

时间:2013-11-27 11:49:48

标签: java exception exception-handling

我的项目中有很多库,并且它们都定义了很多异常,在我的代码中抛出这些异常(当它们有一个合适的名称和描述时)而不是定义是一个糟糕的计划我自己的?

那么抛出​​核心库中定义但可能不存在的异常又是为了您的目的呢? 例如,当用户无法删除图片时抛出java.security.acl.NotOwnerException,因为他们不是所有者,即使我的用户的权限与acl无关。

4 个答案:

答案 0 :(得分:3)

这可能是一个“主要基于意见的”问题,很难说,尽管下面我有一个具体的论点。 : - )

FWIW,我建议使用您自己的适当异常,并且只使用JDK中明确要重用的某些相当普遍的异常。我的具体原因是,无论何时开始使用其他库中的异常,都会增加与该库的链接,并且在需要时更难用另一个库替换它。当然,这对JDK的适用性较小,因为如果你使用的是Java,你几乎与它有关联,但如果有问题的代码没有,我肯定不会使用java.security.acl包中的异常。与ACL有关!

答案 1 :(得分:3)

这绝对不是一个好主意。当我作为支持程序员看到java.security.acl.NotOwnerException时,我会认为问题与访问控制列表有关,并开始我的研究。我可能需要一些工时来得出结论,我们甚至没有使用ACL,而例外只是一个红色的鲱鱼。

但是,当我看到com.ourorganization.ourapp.NotOwnerException时,我知道它必须是(实际的或被认为的)违反我们自己的业务逻辑,并且我会有更热的追随。

还要记住,异常是完整的类,因此可以有很多额外的功能。如果不将这些类用于其预期目的,则这些功能可能无法按预期工作。这可能会给您的班级用户带来很多困惑。

答案 2 :(得分:2)

  

当面临选择抛出的异常类型时,你可以   要么使用别人写的 - Java平台提供   你可以使用很多异常类 - 或者你可以写一个   拥有。

     

如果您回答“是”,则应编写自己的异常类   以下任何问题;否则,你可以使用   别人的。

     

•您是否需要一个未由中的那些代表的异常类型   Java平台?

     

•如果能够区分您的用户,它会对用户有所帮助吗?   其他供应商编写的类引发的异常?

     

•您的代码是否会引发多个相关异常?

     

•如果您使用其他人的例外,用户是否可以访问这些例外情况?   一个类似的问题是,如果你的包装是独立的   自包含?

http://docs.oracle.com/javase/tutorial/essential/exceptions/creating.html

我不会使用导入库的异常,因为它们可能为该库提供特定用途。

答案 3 :(得分:1)

我倾向于使用常见的异常,例如IllegalState等,但是避免使用某些特定的“weirder”异常(例如你的acl示例),因为它可能给人一种错误的印象。

我会用正常的SecurityException替换NotOwnerException,因为你应该已经验证非所有者不能删除不是他的图片。所以基本上不应该首先抛出异常。