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方法相关推荐

  1. java继承实现不用每个类都写toString方法

    每个类都写toString方法很麻烦,采用继承可以很好的解决 import java.io.Serializable;import org.apache.commons.lang.builder.To ...

  2. js中的toString方法

    这篇文章主要给大家分享了js中toString方法的3个作用,文章围绕js中toString方法的相关资料展开全文内容,需要的小伙伴可以参考一下,希望对你的学习有所帮助 一.toString方法的三个 ...

  3. 为什么toString()方法会自动被调用

    转载自:http://blog.csdn.net/anddyhua/article/details/42675099    为什么toString 方法会自动被调用 先执行下面一段代码: packag ...

  4. java中Object类的hashCode和equals及toString方法。

    java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...

  5. java 自定义tostring_自定义java toString方法

    java里我们经常System.out.println(xx) xx可以是一个List 一个HashMap 一个HashSet 一个什么奇怪的自定义的类. 只要能正确显示字符串的背后起作用的都是一个叫 ...

  6. valueOf与toString方法研究

    最后群里讨论一些怪题,有高手就想歪脑想hack这两个东西了,虽然最后失败了,但这精神是非常值得鼓励的.于是决定写一篇文章专门来介绍它们. 基本上,所有JS数据类型都拥有这两个方法,null除外.它们俩 ...

  7. JavaScript中Object.prototype.toString方法的原理

    在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. <一>, ECMAScript 3  1. 在E ...

  8. C# ToString()方法

    ToString的设计目的:为对象提供一个字符串,该字符串描述当前对象的信息. 1.Object的ToString 返回当前对象所属类型的全名,这个意义不大,但是设计很合理,因为有些对象没法返回一个有 ...

  9. Java学习笔记13(equals()方法;toString()方法)

    equals()方法: equals方法是Object类中的方法:Object是所有类的祖宗,所以所有类都有equals()方法: boolean equals(Object obj); equals ...

  10. 打印对象和toString方法

    JAVA对象 java对象是都是Object类的实例,都可直接调用该类中定义的方法,这些方法提供了处理java对象的通用方法. > > 6.2.1打印对象和toString方法     先 ...

最新文章

  1. 并发编程-16AQS同步组件之CountDownLatch 闭锁
  2. 【粉丝福利】今天不谈技术,只送福利!
  3. linux 播放器系统,在Linux上安装和使用开源视频播放器MPlayer
  4. Scala入门到精通——第八节 包和引入
  5. shiro启动之后页面访问不了_java:shiro入门——4
  6. 以30字符宽居中输出python字符串_python3字符串
  7. 【编程语言】Python-Pandas库中的交叉表
  8. android开源SlidingMenu使用
  9. 计算机黑板报主题ps,Photoshop︱用PS创建一个黑板报
  10. Proxifier全局代理软件,其提供了跨平台的端口转发和代理功能
  11. 音频处理——音频处理的基本概念
  12. 多媒体开发之视频格式---1080p逐行和1080i隔行
  13. 求不规则图形外接圆的算法 (附:三角形外接圆计算公式)
  14. sakila-dwh-schema文件
  15. 六个防止SQL注入式攻击的建议
  16. 100万并发连接服务器
  17. 妹子找你修电脑,按照这几步操作,你就是黑客大佬!
  18. 企业级大数据平台应用场景介绍
  19. 年终总结|一个高层项目管理者的反思
  20. 统计学习方法第一章笔记——统计学习方法概论

热门文章

  1. PixiJS学习(9)动画序列帧
  2. 优化模型:钢管订购及运输优化模型
  3. 三菱GXWorks2 多CPU参数设置
  4. delphi利用bing翻译API做的多国语言翻译软件
  5. php 和 java 美刀,通过GOOGLE(谷歌) API获取实时货币汇率(人民币和美金)的PHP代码
  6. 计算机组成原理强制类型转换规则,计算机组成原理——浮点数加减运算强制类型转换...
  7. python库手册_Python 中文开发手册
  8. HDFS教程(02)- HDFS命令汇总
  9. curviloft插件怎么用_【su】插件及其功能图示
  10. 常用的sql语句整理 增删改查