java - 如何避免自定义 Java 异常类中的重复

标签 java exception inheritance dry

我喜欢创建 Exception 类,其名称表明应用程序特定的问题被注意到和抛出。

要定义它们,通常会定义一个新的,其父类(super class)是某种Exception 类型。

由于Exception父类有多个公共(public)构造函数,一般子类看起来是这样的:

package com.example.exception;

/**
 * MyException is thrown when some application-level expectation is not met.
 */
public class MyException extends Exception {

    public MyException() {
        super();
    }

    public MyException(String message) {
        super(message);
    }

    public MyException(Throwable cause) {
        super(cause);
    }

    public MyException(String message, Throwable cause) {
        super(message, cause);
    }

}

DRY的角度来看这个,我发现这种方法很乏味,尤其是当定义了 Exception 层次结构时。

我熟悉 Lombok 等工具有助于减少常见 Java 模式的重复;对于解决异常类重复这一特定问题的工具,有什么建议吗?

最佳答案

如果您创建“业务”异常,您不应该只从Exception 复制所有构造函数。相反,创建使用您的业务对象的异常。例如,如果您的业务对象 Request 建模的请求失败,您可以使用单个构造函数创建一个 RequestFailedException:

public RequestFailedException(Request request) {
    super("Request to " + request.getUrl() + " failed.";
}

您甚至可以将对 Request 对象的引用存储在一个字段中并提供一个 getter,以便处理异常的方法可以获得有关正在发生的事情的更多信息。

关于java - 如何避免自定义 Java 异常类中的重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31436499/

相关文章:

java - Resteasy异常 "No type information to extract entity with, use other getEntity() methods"

java - org.springframework.dao.InvalidDataAccessApiUsageException : No value supplied for the SQL parameter

java - 我什么时候应该重新抛出异常?

c++ - 这样的继承对性能有何影响?

c++ - 创建存储数组属性的对象数组

java - Selenium 未在表单中填写密码属性

java - 从 react 堆级别运行时的 Maven 强制执行器问题

c# - 从 HttpResponseException 中提取 HttpError

c# - 运行应用程序时出现错误图像格式异常

c# - 选择子类的父方法(C#)