Java 重用库定义的异常

Java 重用库定义的异常,java,exception,exception-handling,Java,Exception,Exception Handling,我的项目中有很多库,它们都定义了很多异常,在我的代码中抛出这些异常(当它们有合适的名称和描述时)而不是定义我自己的异常,这会是一个糟糕的计划吗 抛出在核心库中定义但可能不是为您的目的而定义的异常又如何? 例如,当用户不能删除图片时抛出java.security.acl.NotOwnerException,因为他们不是图片的所有者,即使我的用户的权限与acl无关。这可能是一个“主要基于意见”的问题,很难说,尽管我下面有一个具体的论点。:-) FWIW,我建议使用您自己的适当异常,并且只使用JDK中

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

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

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

FWIW,我建议使用您自己的适当异常,并且只使用JDK中明确用于重用的某些相当通用的异常。我这样做的具体原因是,每当您开始使用其他库中的异常时,您都会增加到该库的链接,并且在需要时更难用另一个库替换它。当然,这不太适用于JDK,因为如果您使用的是Java,那么您与JDK几乎是链接在一起的,但是如果所讨论的代码与acl没有任何关系,我当然不会使用
Java.security.acl
包中的异常

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


FWIW,我建议使用您自己的适当异常,并且只使用JDK中明确用于重用的某些相当通用的异常。我这样做的具体原因是,每当您开始使用其他库中的异常时,您都会增加到该库的链接,并且在需要时更难用另一个库替换它。当然,这不太适用于JDK,因为如果您使用的是Java,那么您与JDK几乎是链接在一起的,但是如果所讨论的代码与acl没有任何关系,我当然不会使用
Java.security.acl
包中的异常

我倾向于使用常见的异常,如非法状态等,但避免使用某些特定的“奇怪”异常(如您的acl示例),因为这可能会给人错误的印象


我将用一个普通的SecurityException替换NotOwnerException,因为您应该已经验证了非所有者不能删除非他的图片。因此,从本质上讲,一开始就不应该抛出异常。

我倾向于使用常见的异常,如非法状态等,但避免使用某些特定的“奇怪”异常(如acl示例),因为它可能会给人错误的印象


我将用一个普通的SecurityException替换NotOwnerException,因为您应该已经验证了非所有者不能删除非他的图片。因此,从根本上说,一开始就不应该抛出异常。

这绝对不是一个好主意。作为一名支持程序员,当我看到一个
java.security.acl.NotOwnerException
时,我会假设这个问题与访问控制列表有关,并开始研究这个方向。我可能要花上几个小时才能得出结论,我们甚至没有使用ACL,而这个例外只是一个转移视线的问题

但是当我看到一个
com.ourorganization.ourapp.NotOwnerException
时,我知道这一定是(实际的或感知到的)违反了我们自己的业务逻辑,我得到了一个更热门的线索


还要记住,异常是成熟的类,因此可以有很多附加特性。如果您没有将这些类用于其预期用途,则这些功能可能无法按预期工作。这可能会给类的用户带来很多困惑。

这绝对不是一个好主意。作为一名支持程序员,当我看到一个
java.security.acl.NotOwnerException
时,我会假设这个问题与访问控制列表有关,并开始研究这个方向。我可能要花上几个小时才能得出结论,我们甚至没有使用ACL,而这个例外只是一个转移视线的问题

但是当我看到一个
com.ourorganization.ourapp.NotOwnerException
时,我知道这一定是(实际的或感知到的)违反了我们自己的业务逻辑,我得到了一个更热门的线索

还要记住,异常是成熟的类,因此可以有很多附加特性。如果您没有将这些类用于其预期用途,则这些功能可能无法按预期工作。这可能会给类的用户带来很多混乱

在选择要抛出的异常类型时,您可以 或者使用其他人编写的,Java平台提供 您可以使用很多异常类,也可以编写一个 拥有

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

•您是否需要一个异常类型,而该异常类型不由 Java平台

•如果用户能够区分您的 由其他供应商编写的类引发的异常

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

•如果您使用其他人的异常,用户是否有权访问这些异常? 类似的问题是,您的包是否应该是独立的和 自给自足的

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

在选择要抛出的异常类型时,您可以 或者使用其他人编写的,Java平台提供 您可以使用很多异常类,也可以编写一个 拥有

如果回答“是”,则应该编写自己的异常类 下列任何问题;否则,你可以