Java之注解@Data和@ToString(callSuper=true)解读

 更新时间:2024年11月06日 09:48:03   作者:A_bad_horse  
在使用Lombok库的@Data注解时,若子类未通过@ToString(callSuper=true)注明包含父类属性,toString()方法只打印子类属性,解决方法:1. 子类重写toString方法;2. 子类使用@Data和@ToString(callSuper=true),父类也应使用@Data

问题复现

@Data
public class People {
    private String height;
    private String weight;
}
@Data
public class Student extends People {
    private String name;
}
public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.setHeight("180cm");
        student.setWeight("65kg");
        student.setName("Jack");

        System.out.println(student.toString());
    }
}

运行代码后,打印如下:

Student(name=Jack)

Root Cause

如果domain中没有重写toString, 且使用了@Data注解, 调用toString时只会打印子类本身的属性值, 如果想要打印父类的属性:

  • 方式一:重写tostring
  • 方式二:子类加上@Data和@ToString(callSuper = true)两个注解, 父类也使用注解@Data

解决方案

@Data
@ToString(callSuper = true)
public class Student extends People {
    private String name;
}

行代码后,打印如下:

Student(super=People(height=180cm, weight=65kg), name=Jack)

lombok 使用@Data时会重写toString(),查看@Data源代码;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot之自定义Schema扩展方式

    SpringBoot之自定义Schema扩展方式

    这篇文章主要介绍了SpringBoot之自定义Schema扩展方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java多线程下载文件原理解析

    java多线程下载文件原理解析

    这篇文章主要为大家详细介绍了java多线程下载文件原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Java判断ip是否为IPV4或IPV6地址的多种方式

    Java判断ip是否为IPV4或IPV6地址的多种方式

    本文主要介绍了Java判断ip是否为IPV4或IPV6地址的多种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 从零开始让你的Spring Boot项目跑在Linux服务器

    从零开始让你的Spring Boot项目跑在Linux服务器

    这篇文章主要给大家介绍了如何从零开始让你的Spring Boot项目跑在Linux服务器的相关资料,由于springboot是内嵌了tomcat,所以可以直接将项目打包上传至服务器上,需要的朋友可以参考下
    2021-11-11
  • Java实现FTP批量大文件上传下载篇1

    Java实现FTP批量大文件上传下载篇1

    这篇文章主要为大家详细介绍了Java实现FTP批量大文件上传下载的基础篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • redis 使用lettuce 启动内存泄漏错误的解决方案

    redis 使用lettuce 启动内存泄漏错误的解决方案

    这篇文章主要介绍了redis 使用lettuce 启动内存泄漏错误的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • spring装配bean的3种方式总结

    spring装配bean的3种方式总结

    这篇文章主要给大家介绍了关于spring装配bean的3种方式,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • Java数据结构之链表实现(单向、双向链表及链表反转)

    Java数据结构之链表实现(单向、双向链表及链表反转)

    这篇文章主要给大家介绍了关于Java数据结构之链表实现的相关资料,其中包括单向链表、双向链表及链表反转的实现代码,需要的朋友可以参考下
    2021-06-06
  • 如何解决创建maven工程时,产生“找不到插件的错误”问题

    如何解决创建maven工程时,产生“找不到插件的错误”问题

    这篇文章主要介绍了如何解决创建maven工程时,产生“找不到插件的错误”问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 深入浅出探索Java分布式锁原理

    深入浅出探索Java分布式锁原理

    单体系统中,在高并发场景下想要访问共享资源的时候,我们需要通过加锁的方式来保证共享资源并发的安全性,确保在同一时刻只有一个线程对共享资源进行操作
    2022-02-02

最新评论