Java如何使用ReflectionToStringBuilder类?

实施toString()方法有时可能会成为一个耗时的过程。如果您的班级中有几个字段,那可能没问题,但是当您处理多个字段时,每次新的字段来临时,肯定要花一些时间来更新此方法。

这是ReflectionToStringBuilder可以帮助您自动化实现该toString()方法的过程的类。此类提供一个静态toString()方法,该方法至少使用一个参数,该参数引用要从中生成字符串的对象实例。

我们还可以格式化生成的字符串的结果。在下面的示例中,我们使用a创建to字符串方法,ToStringStyle.MULTI_LINE_STYLE并且如果需要,我们还可以输出瞬态和静态字段,默认情况下将其省略。

package org.nhooo.example.commons.lang;

import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

public class ReflectionToStringDemo {
    private Integer id;
    private String name;
    private String description;
    public static final String KEY = "APP-KEY";
    private transient String secretKey;

    public ReflectionToStringDemo(Integer id, String name, String description,
                                  String secretKey) {
        this.id = id;
        this.name = name;
        this.description = description;
        this.secretKey = secretKey;
    }

    @Override
    public String toString() {
        // 生成包括瞬态和静态字段的toString。
        return ReflectionToStringBuilder.toString(this,
            ToStringStyle.MULTI_LINE_STYLE, true, true);
    }

    public static void main(String[] args) {
        ReflectionToStringDemo demo = new ReflectionToStringDemo(1, "MANUTD",
            "Manchester United", "secret**");
        System.out.println("Demo = " + demo);
    }
}

上面的代码片段产生的输出是:

Demo = org.nhooo.example.commons.lang.ReflectionToStringDemo@452b3a41[
  id=1
  name=MANUTD
  description=Manchester United
  KEY=APP-KEY
  secretKey=secret**
]

Maven依赖

<!-- https://search.maven.org/remotecontent?filepath=org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.9</version>
</dependency>

Maven中央