通过ToStringBuilder实现toString方法
1.什么是ToStringBuilder?
ToStringBuilder 用于构建一个类的toString字符串的工具类,使用该类需要导入commons-lang.jar;或者导入maven仓库:
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version>
</dependency>
然后导入即可:import org.apache.commons.lang3.builder.ToStringBuilder;
2.为什么要使用ToStringBuilder?
因为大部分实体的toString()方法都用的是简单的"+",而每"+"一个就会new一个String对象,这样如果系统内存小的话会暴内存。使用ToStringBuilder就可以避免暴内存这种问题的。
3.主要方法有哪些?
append()方法: 该方法用于自定义添加需要打印哪些变量,只有使用append添加的变量才会在toString函数中打印。
// 方法源码
public ToStringBuilder append(Object obj) {this.style.append(this.buffer, (String)null, obj, (Boolean)null);return this;}public ToStringBuilder append(String fieldName, Object obj) {this.style.append(this.buffer, fieldName, obj, (Boolean)null);return this;}...
reflectionToString()方法(静态): 该方法使用反射机制打印一个类中的所有变量,该函数还提供一个变量style,建议使用ToStringStyle.DEFAULT_STYLE
。
//方法源码
public static String reflectionToString(Object object) {return ReflectionToStringBuilder.toString(object);}public static String reflectionToString(Object object, ToStringStyle style) {return ReflectionToStringBuilder.toString(object, style);
}...
4.具体使用
通过ToStringBuilder->实现toString方法:
1.ToStringBuilder比较适合在打日志时,能够很方便的自动打印对象中的属性值;
2.利用反射原理拿到对象中域fields的属性并添加到新的对象中builder并最终toString;
(注:idea安装了lombok插件,只要在类前增加@Getter和@Setter注解即可不用手写方法!)
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.sql.Timestamp;/*** DTO: 基础数据传输对象(Data Transfer Object)*/
@Getter
@Setter
public class BaseDTO implements Serializable {private String createBy;private String updatedBy;private Timestamp createTime;private Timestamp updateTime;@Overridepublic String toString() {ToStringBuilder builder = new ToStringBuilder(this);Field[] fields = this.getClass().getDeclaredFields();try {for (Field f : fields) {f.setAccessible(true);builder.append(f.getName(), f.get(this));//builder.append(f.getName(), f.get(this)).append("\n");}} catch (Exception e) {builder.append("toString builder encounter an error");}return builder.toString();}
}
也可以这样使用:
@Override
public String toString() {return ToStringBuilder.reflectionToString(this, ToStringStyle.DEFAULT_STYLE);
}
5.结果对比
@Test
public void testBaseDTO(){BaseDTO dto = new BaseDTO();dto.setCreateBy("createName");dto.setUpdatedBy("updateName");System.out.println(dto.toString());
}
第一种方法(append):
me.zhengjie.base.BaseDTO@2fc14f68[createBy=createName,updatedBy=updateName,createTime=<null>,updateTime=<null>]
第二种方法(reflectionToString):
me.zhengjie.base.BaseDTO@445b84c0[createBy=createName,updatedBy=updateName,createTime=<null>,updateTime=<null>]
两种方法结果差不多,只是append方法更灵活,还可以在每次属性添加后换行或者自定义字符串;而reflectionToString静态方法简单直白。
通过ToStringBuilder实现toString方法相关推荐
- java继承实现不用每个类都写toString方法
每个类都写toString方法很麻烦,采用继承可以很好的解决 import java.io.Serializable;import org.apache.commons.lang.builder.To ...
- js中的toString方法
这篇文章主要给大家分享了js中toString方法的3个作用,文章围绕js中toString方法的相关资料展开全文内容,需要的小伙伴可以参考一下,希望对你的学习有所帮助 一.toString方法的三个 ...
- 为什么toString()方法会自动被调用
转载自:http://blog.csdn.net/anddyhua/article/details/42675099 为什么toString 方法会自动被调用 先执行下面一段代码: packag ...
- java中Object类的hashCode和equals及toString方法。
java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...
- java 自定义tostring_自定义java toString方法
java里我们经常System.out.println(xx) xx可以是一个List 一个HashMap 一个HashSet 一个什么奇怪的自定义的类. 只要能正确显示字符串的背后起作用的都是一个叫 ...
- valueOf与toString方法研究
最后群里讨论一些怪题,有高手就想歪脑想hack这两个东西了,虽然最后失败了,但这精神是非常值得鼓励的.于是决定写一篇文章专门来介绍它们. 基本上,所有JS数据类型都拥有这两个方法,null除外.它们俩 ...
- JavaScript中Object.prototype.toString方法的原理
在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. <一>, ECMAScript 3 1. 在E ...
- C# ToString()方法
ToString的设计目的:为对象提供一个字符串,该字符串描述当前对象的信息. 1.Object的ToString 返回当前对象所属类型的全名,这个意义不大,但是设计很合理,因为有些对象没法返回一个有 ...
- Java学习笔记13(equals()方法;toString()方法)
equals()方法: equals方法是Object类中的方法:Object是所有类的祖宗,所以所有类都有equals()方法: boolean equals(Object obj); equals ...
- 打印对象和toString方法
JAVA对象 java对象是都是Object类的实例,都可直接调用该类中定义的方法,这些方法提供了处理java对象的通用方法. > > 6.2.1打印对象和toString方法 先 ...
最新文章
- 并发编程-16AQS同步组件之CountDownLatch 闭锁
- 【粉丝福利】今天不谈技术,只送福利!
- linux 播放器系统,在Linux上安装和使用开源视频播放器MPlayer
- Scala入门到精通——第八节 包和引入
- shiro启动之后页面访问不了_java:shiro入门——4
- 以30字符宽居中输出python字符串_python3字符串
- 【编程语言】Python-Pandas库中的交叉表
- android开源SlidingMenu使用
- 计算机黑板报主题ps,Photoshop︱用PS创建一个黑板报
- Proxifier全局代理软件,其提供了跨平台的端口转发和代理功能
- 音频处理——音频处理的基本概念
- 多媒体开发之视频格式---1080p逐行和1080i隔行
- 求不规则图形外接圆的算法 (附:三角形外接圆计算公式)
- sakila-dwh-schema文件
- 六个防止SQL注入式攻击的建议
- 100万并发连接服务器
- 妹子找你修电脑,按照这几步操作,你就是黑客大佬!
- 企业级大数据平台应用场景介绍
- 年终总结|一个高层项目管理者的反思
- 统计学习方法第一章笔记——统计学习方法概论
热门文章
- PixiJS学习(9)动画序列帧
- 优化模型:钢管订购及运输优化模型
- 三菱GXWorks2 多CPU参数设置
- delphi利用bing翻译API做的多国语言翻译软件
- php 和 java 美刀,通过GOOGLE(谷歌) API获取实时货币汇率(人民币和美金)的PHP代码
- 计算机组成原理强制类型转换规则,计算机组成原理——浮点数加减运算强制类型转换...
- python库手册_Python 中文开发手册
- HDFS教程(02)- HDFS命令汇总
- curviloft插件怎么用_【su】插件及其功能图示
- 常用的sql语句整理 增删改查