@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()
的基础设施太复杂了。