Lombok @ToString 注解:快速打印对象内容

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/

截止目前, 星球 内专栏累计输出 80w+ 字,讲解图 3365+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2700+ 小伙伴加入学习 ,欢迎点击围观

Lombok 的 @ToString 注解用于自动生成 toString() 方法,帮助快速打印对象的内容,以便调试或日志记录。默认情况下,@ToString 会将类中所有非静态字段包含在 toString() 方法中,并按字段声明的顺序显示字段值。

基本用法

@ToString 可以直接加在类上,自动生成 toString() 方法,包含所有字段的名称和值。

示例

import lombok.ToString;

@ToString
public class User {
    private String name;
    private int age;
}

上面的代码会生成以下 toString() 方法:

public String toString() {
    return "User(name=" + this.name + ", age=" + this.age + ")";
}

这样可以直接使用 System.out.println(user); 输出对象的字符串表示。

常见参数

@ToString 注解提供了多种配置参数,以便定制 toString() 方法的生成方式。

exclude

exclude 参数用于排除不希望包含在 toString() 方法中的字段。可以指定一个或多个字段名:

import lombok.ToString;

@ToString(exclude = "password")
public class User {
    private String name;
    private int age;
    private String password;
}

此时生成的 toString() 方法将不会包含 password 字段。

callSuper

callSuper 参数决定是否调用父类的 toString() 方法。如果当前类继承了一个父类,且父类的 toString() 方法中有重要的信息,可以将 callSuper 设置为 true,以便将父类的信息包含进来:

import lombok.ToString;

@ToString(callSuper = true)
public class Employee extends User {
    private String position;
}

onlyExplicitlyIncluded

onlyExplicitlyIncluded 参数用于控制仅生成包含 @ToString.Include 注解的字段。这种方式适合想要手动选择部分字段,而不是默认全部生成的情况。

import lombok.ToString;

@ToString(onlyExplicitlyIncluded = true)
public class User {
    @ToString.Include
    private String name;
    
    @ToString.Include
    private int age;

    private String password; // 未添加 @ToString.Include,不会包含在 toString() 中
}

注意事项

  • 隐私数据@ToString 默认包含所有字段,对于敏感信息(如密码、身份证号等),要特别小心,确保使用 excludeonlyExplicitlyIncluded 排除这些字段。
  • 继承关系callSuper 可以帮助将父类的字段包含在 toString() 中,但应根据项目需求合理配置。
  • 调试利器@ToString 能快速生成有用的字符串表示,对于调试和日志记录非常实用。

小结

Lombok 的 @ToString 注解极大简化了 toString() 方法的编写,特别适用于需要频繁输出对象信息的场景。通过合理配置参数,如 excludecallSuperonlyExplicitlyIncluded,可以定制 toString() 的输出内容。合理地使用 @ToString,不仅可以提升开发效率,还能保持代码整洁,减少出错几率。