@ToString
任何类定义都可以用@ToString注释,让lombok生成toString()方法的实现。默认情况下,它会按顺序打印您的类名称以及每个字段,并以逗号分隔。通过将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,更高等级的成员被首先打印,并且相同等级的成员以它们在源文件中出现的相同顺序被打印。
package com.amos;
import lombok.ToString;
/**
* @author amos
*/
@ToString
public class ToStringExample {
/**
* 静态field不会被生成到toString方法内
*/
private static final int STATIC_VAR = 10;
private String name;
private Shape shape = new Square(5, 10);
private String[] tags = new String[]{"1", "2", "3"};
/**
* 标记 @ToString.Exclude
* toString方法不包含此字段
*/
@ToString.Exclude
private int id;
/**
* callSuper -> toString方法体内会带上超类的toString方法
* includeFieldNames -> 是否包含字段名,false不包含 true包含 默认是true
*/
@ToString(callSuper = true, includeFieldNames = false)
public static class Square extends Shape {
private final int width, height;
public Square(int width, int height) {
this.width = width;
this.height = height;
}
}
public static class Shape {
@Override
public String toString() {
return "Shape[" + this.hashCode() + "]";
}
}
public static void main(String[] args) {
System.out.println(new Shape());
System.out.println(new Square(1,2));
System.out.println(new ToStringExample());
}
}
执行main方法后,打印内容如下:
Shape[1929600551]
ToStringExample.Square(super=Shape[1053782781], 1, 2)
ToStringExample(name=null, shape=ToStringExample.Square(super=Shape[1211888640], 5, 10), tags=[1, 2, 3])
先想明白为何会如此打印,再看下边编译后生成的class文件,加深印象。
编译后的class文件如下所示:
package com.amos;
import java.util.Arrays;
public class ToStringExample {
private static final int STATIC_VAR = 10;
private String name;
private ToStringExample.Shape shape = new ToStringExample.Square(5, 10);
private String[] tags = new String[]{"1", "2", "3"};
private int id;
public ToStringExample() {
}
public static void main(String[] args) {
System.out.println(new ToStringExample.Shape());
System.out.println(new ToStringExample.Square(1, 2));
System.out.println(new ToStringExample());
}
public String toString() {
return "ToStringExample(name=" + this.name + ", shape=" + this.shape + ", tags=" + Arrays.deepToString(this.tags) + ")";
}
public static class Shape {
public Shape() {
}
public String toString() {
return "Shape[" + this.hashCode() + "]";
}
}
public static class Square extends ToStringExample.Shape {
private final int width;
private final int height;
public Square(int width, int height) {
this.width = width;
this.height = height;
}
public String toString() {
return "ToStringExample.Square(super=" + super.toString() + ", " + this.width + ", " + this.height + ")";
}
}
}
先看Shape类,调用System.out.printXX方法时,默认会调用该对象的toString方法,所以Shape的toString打印结果比较好理解。
再看Square的toString方法,因为Square类是ToStringExample类的静态内部类,所以再该类名前会有ToStringExample类名标识。因为添加了callSuper = true
,所以再toString方法内,会加上超类的toString方法(查看class文件)。再看includeFieldNames = false
,toString默认会带上字段名的,标识会false后,不会带字段名width
和height
.
最后看ToStringExample的toString方法,因为STATIC_VAR是静态字段,所以不会置于toString方法体内,又因为id被添加上 @ToString.Exclude注解,所以该字段也不会置于toString方法体内。
本章完!
Original url: Access
Created at: 2019-10-30 15:54:56
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论