我的项目中有很多库,并且它们都定义了很多异常,在我的代码中抛出这些异常(当它们有一个合适的名称和描述时)而不是定义是一个糟糕的计划我自己的?
那么抛出核心库中定义但可能不存在的异常又是为了您的目的呢?
例如,当用户无法删除图片时抛出java.security.acl.NotOwnerException
,因为他们不是所有者,即使我的用户的权限与acl无关。
答案 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,因为你应该已经验证非所有者不能删除不是他的图片。所以基本上不应该首先抛出异常。