@StandardException
TODO
@StandardException
在 lombok v1.18.21 版本中以實驗性質功能推出。
概觀
將此註解放在您自己的例外類型上 (繼承自 Exception
或任何其他繼承自 Throwable
的新類別)。此註解接著會產生最多 4 個建構子
- 一個無參數建構子 (
MyException()
),代表沒有訊息,也沒有原因。 - 一個僅包含訊息的建構子 (
MyException(String message)
),代表提供的訊息,且沒有原因。 - 一個僅包含原因的建構子 (
MyException(Throwable cause)
),如果有的話,將從原因複製訊息,並使用提供的原因。 - 一個完整建構子 (
MyException(String message, Throwable cause)
)。
每個建構子都會轉發到完整建構子;您可以手動撰寫任何或所有這些建構子,在這種情況下,lombok 將不會產生它。如果完整建構子需要產生,它將調用 super(message);
,然後如果原因不是 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)
會將原因初始化為沒有原因,並且之後無法通過調用 initCause
來更改它。但是,lombok 的標準例外允許您稍後使用 initCause
覆寫明確的無原因。
第二個輕微的功能差異:通常,如果實作為 super(cause);
,調用 new SomeException(cause)
將會把訊息設定為等於原因的訊息。但是,lombok 不會這樣做 - 它會讓例外完全沒有訊息。我們認為繼承訊息在根本上是錯誤的 - 在沒有例外類型上下文的情況下,訊息不能保證是有意義的。原因應該在任何相關的地方列出;如果您正在使用訊息作為直接使用者回饋 (這在 java 社群中很少見),@StandardException
實際上也無法幫助您;例如,getLocalizedMessage()
的基礎架構太過複雜。