java - 我们什么时候应该创建自己的 Java 异常类?

标签 java class exception api-design

从良好的设计/实践的角度来看,我们什么时候应该创建和使用自定义 Java 异常类,而不是 Java 中已经预定义的那些?

在某些应用程序中,我看到几乎创建了自定义异常类,它们努力始终使用 native Java 异常。另一方面,有些应用程序为(几乎)所有内容定义了自定义异常。

最佳答案

来自 Best Practices for Exception Handling :

如果它们没有对客户端代码有用的信息,请尽量不要创建新的自定义异常。

以下代码有什么问题?

public class DuplicateUsernameException extends Exception {}

除了指示性异常名称之外,它没有向客户端代码提供任何有用的信息。不要忘记 Java Exception 类与其他类一样,您可以在其中添加您认为客户端代码将调用的方法以获取更多信息。

我们可以在DuplicateUsernameException中添加有用的方法,例如:

public class DuplicateUsernameException
    extends Exception {
    public DuplicateUsernameException 
        (String username){....}
    public String requestedUsername(){...}
    public String[] availableNames(){...}
}

新版本提供了两个有用的方法:requestedUsername(),返回请求的名称,availableNames(),返回一个可用的用户名数组,类似于一个请求。客户端可以使用这些方法来通知请求的用户名不可用并且其他用户名可用。但如果你不打算添加额外的信息,那么只需抛出一个标准异常:

throw new IllegalArgumentException("Username already taken");

关于java - 我们什么时候应该创建自己的 Java 异常类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22698584/

相关文章:

java - 未使用 JPA 检索日期字段

javascript - 访问 ES6 类中静态 setter 中的类数据

class - JAX-WS - Web 服务生成的类在哪里?

c++ - 在 x64 上获取真正的 C++ 异常

java - 弄清楚类 Scanner 及其异常如何在 Java 中协同工作

c# - 初始化 VCProjectEngineObject (Microsoft.VisualStudio.VCProjectEngine.dll) 时出现错误 80040154(类未注册异常)

java - Spring框架JSON序列化为数组而不是对象

java - 为什么 (i<=j && j<=i && i!=j) 评估为 TRUE?

java - Hadoop Java : how to specify map key as one of the index of input split?

jquery - 如何获取类的属性?