@ToString
無需啟動偵錯器即可查看您的欄位:只需讓 lombok 為您產生 toString
即可!
概觀
使用 @ToString
註解類別將會讓 lombok 產生 toString()
方法的實作。您可以使用組態選項來指定是否應包含欄位名稱,否則格式是固定的:類別名稱後接括號,其中包含以逗號分隔的欄位,例如 MyClass(foo=123, bar=234)
。
透過將 includeFieldNames
參數設定為 true,您可以為 toString()
方法的輸出增加一些清晰度(但也會增加一些長度)。
預設情況下,將會印出所有非靜態欄位。如果您想要跳過某些欄位,您可以使用 @ToString.Exclude
註解這些欄位。或者,您可以使用 @ToString(onlyExplicitlyIncluded = true)
來明確指定您希望使用的欄位,然後使用 @ToString.Include
標記您想要包含的每個欄位。
透過將 callSuper
設定為 true,您可以將父類別 toString
實作的輸出包含到輸出中。請注意,java.lang.Object
中 toString()
的預設實作幾乎沒有意義,因此除非您正在擴展另一個類別,否則您可能不想這樣做。
您也可以在 toString
中包含方法呼叫的輸出。只有不帶引數的實例(非靜態)方法可以包含在內。若要這樣做,請使用 @ToString.Include
標記該方法。
您可以使用 @ToString.Include(name = "some other name")
變更用於識別成員的名稱,並且可以使用 @ToString.Include(rank = -1)
變更成員的列印順序。沒有 rank 的成員會被視為 rank 0,rank 較高的成員會先印出,而 rank 相同的成員會按照它們在原始碼檔案中出現的順序印出。
使用 Lombok
import lombok.ToString;
|
原生 Java
import java.util.Arrays;
|
支援的組態鍵
-
lombok.toString.includeFieldNames
= [true
|false
] (預設值:true) - 通常 lombok 會為每個欄位產生 toString 回應的片段,格式為
fieldName = fieldValue
。如果此設定設為false
,lombok 將會省略欄位名稱,而僅部署以逗號分隔的所有欄位值清單。註解參數 'includeFieldNames
',如果明確指定,則優先於此設定。 -
lombok.toString.doNotUseGetters
= [true
|false
] (預設值:false) - 如果設定為
true
,lombok 將直接存取欄位,而不是在使用 getters(如果可用的話)產生toString
方法時。註解參數 'doNotUseGetters
',如果明確指定,則優先於此設定。 -
lombok.toString.callSuper
= [call
|skip
|warn
] (預設值:skip) - 如果設定為
call
,lombok 將在您的類別擴展某些內容時產生對父類別toString
實作的呼叫。如果設定為skip
,則不會產生此類呼叫。如果設定為warn
,也不會產生此類呼叫,但 lombok 會產生警告來告知您。 -
lombok.toString.onlyExplicitlyIncluded
= [true
|false
] (預設值:false) - 如果設定為
false
(預設值),則所有欄位(除非是static
、名稱以錢字符號開頭,或因其他顯而易見的原因而被排除)都將作為要包含在 toString 中的預設集合,可以使用@ToString.Exclude
和@ToString.Include
選項進行修改。如果設定為true
,則除非明確使用@ToString.Include
標記,否則不會包含任何內容。 -
lombok.toString.flagUsage
= [warning
|error
] (預設值:未設定) - 如果已組態,Lombok 會將任何
@ToString
的使用標記為警告或錯誤。
小字印刷
如果存在任何名為 toString
且不帶引數的方法,無論傳回類型為何,都不會產生方法,而是發出警告,說明您的 @ToString
註解沒有作用。您可以使用 @lombok.experimental.Tolerate
標記任何方法,以將它們從 lombok 中隱藏。
陣列透過 Arrays.deepToString
印出,這表示包含自身的陣列將會導致 StackOverflowError
。但是,此行為與例如 ArrayList
沒有不同。
如果方法被標記為包含且它與欄位具有相同的名稱,則它會取代該欄位的 toString 輸出(該方法被包含,該欄位被排除,並且方法的輸出會印在欄位將被印出的位置)。
在 lombok 1.16.22 之前,包含/排除可以使用 @ToString
註解的 of
和 exclude
參數來完成。這種舊式包含機制仍然受到支援,但未來將會被棄用。
在成員上同時具有 @ToString.Exclude
和 @ToString.Include
會產生警告;在這種情況下,該成員將被排除。
我們不保證在 lombok 版本之間,產生的 toString()
方法的輸出會保持相同。您永遠不應設計您的 API,以至於其他程式碼被迫解析您的 toString()
輸出!
預設情況下,任何以 $ 符號開頭的變數都會自動排除。您只能使用 @ToString.Include
註解來包含它們。
如果存在要包含之欄位的 getter,則會呼叫它,而不是使用直接欄位參考。此行為可以被抑制
@ToString(doNotUseGetters = true)
@ToString
也可以在 enum 定義上使用。
如果您已透過 lombok.config
鍵 lombok.addNullAnnotations
組態了空值註解風格,則方法或傳回類型(視所選風格而定)會使用非空值註解進行註解。