我喜欢创建Exception类,其名称表示注意和抛出特定于应用程序的问题.
为了定义它们,通常会定义一个新类,其超类是一些异常类型.
由于父Exception类中有多个常见的构造函数,通常子类看起来像这样:
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,以便处理异常的方法可以获得有关正在发生的事情的更多信息.