@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;
|
Vanilla 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
会生成警告;在这种情况下,该成员将被排除。
我们不保证生成的 toString()
方法的输出在 lombok 版本之间保持相同。无论如何,您永远不应设计您的 API,以便其他代码被迫解析您的 toString()
输出!
默认情况下,任何以 $ 符号开头的变量都会自动排除。您只能通过使用 @ToString.Include
注解来包含它们。
如果存在要包含的字段的 getter,则会调用它而不是使用直接字段引用。此行为可以被抑制
@ToString(doNotUseGetters = true)
@ToString
也可以在枚举定义上使用。
如果您已通过 lombok.config
键 lombok.addNullAnnotations
配置了空值注解风格,则方法或返回类型(根据所选风格适当)将使用非空注解进行注解。