@StandardException
TODO
@StandardException 在 lombok v1.18.21 中作为实验性功能引入。
概述
将此注解放在您自己的异常类型上(继承自 extends Exception 或任何其他继承自 Throwable 的新类)。此注解将生成最多 4 个构造函数
- 一个无参数构造函数 (
MyException()),表示没有消息,也没有原因。 - 一个仅包含消息的构造函数 (
MyException(String message)),表示提供的消息,没有原因。 - 一个仅包含原因的构造函数 (
MyException(Throwable cause)),如果存在原因,它将从原因复制消息,并使用提供的原因。 - 一个完整的构造函数 (
MyException(String message, Throwable cause))。
每个构造函数都转发到完整的构造函数;您可以手动编写任何或所有这些构造函数,在这种情况下 lombok 将不会生成它。完整的构造函数(如果需要生成)将调用 super(message);,如果 cause 不为 null,则会调用 super.initCause(cause);。
几乎没有理由不将此注解放在所有自定义异常上。
使用 Lombok
import lombok.experimental.StandardException;
|
原生 Java
public class ExampleException extends Exception {
|
支持的配置键
-
lombok.standardException.addConstructorProperties= [true|false] (默认值:false) -
lombok.standardException.flagUsage= [warning|error] (默认值: 未设置) - 如果配置,Lombok 将把任何
@StandardException的使用标记为警告或错误。
小字号声明
Lombok 不会检查您是否扩展了实际的异常类型。
Lombok 不要求您继承的类具有 Throwable cause 变体,因为并非所有异常都具有这些变体。但是,`Parent(String message)` 构造函数以及无参数构造函数必须存在。
存在一个非常小的功能差异:通常,调用 new SomeException(message, null) 会将 cause 初始化为无 cause,并且之后无法通过调用 initCause 更改。但是,lombok 的标准异常允许您稍后用 initCause 覆盖显式的无 cause。
第二个小的功能差异:通常,调用 new SomeException(cause),如果实现为 super(cause);,会将消息设置为等于 cause 的消息。但是,lombok 不会这样做 - 它使异常完全没有消息。我们认为继承消息从根本上是错误的 - 消息不能保证在没有异常类型上下文的情况下是有意义的。Cause 应该在任何相关的地方列出;如果您正在使用消息作为直接用户反馈(这在 java 社区中很少见),那么 @StandardException 实际上也无法帮助您;例如 getLocalizedMessage() 的基础设施太复杂了。