之前都是直接toString,今天看到了ToStringBuilder就想知道他的用处。

简单介绍:

1、

项目中一般都需要打印日志,所有实体的toString()方法都是用简单的"+",因为每"+" 一个就会 new 一个 String 对象,这样如果系统内存小的话会暴内存。使用ToStringBuilder就可以避免暴内存这种问题。

ToStringBuilder的reflectionToString方法:

  logger.info("请求数据:"+ToStringBuilder.reflectionToString(req));

2、

ToStringBuilder在包 common-lang 中,主要用于一个类的格式化输出。ToStringBuilder类中的append方法可以向该类添加基本类型、数组和对象 ,只有添加的方法才会被toString方法输出。
        ToStringStyle类则是对输出的内容进行格式化。

详细讲解

一、简介与引入 
1、ToStringBuilder、HashCodeBuilder、EqualsBuilder、ToStringStyle、ReflectionToStringBuilder、CompareToBuilder等这些类都是位于commons-lang.jar下面的,所以要使用这些类一定要导入commons-lang.jar。 
2、为什么要使用ToStringBuilder?

 系统中一般都要打印日志的,因为所有实体的toString()方法 都用的是简单的"+",因为每"+" 一个就会 new 一个 String 对象,这样如果系统内存小的话会暴内存(前提系统实体比较多)。使用ToStringBuilder就可以避免暴内存这种问题的。

二、示例学习 
1、ToStringBuilder的append方法

 ToStringBuilder类主要用于类的格式化输出。ToStringBuilder中append方法可以向该类添加基本类型、数组、和对象,只有添加的方法才会被toString输出。如:
class TaxReturn {private String ssn;private int year;private String lastName;private BigDecimal taxableIncome;// get/set方法省略public TaxReturn() {}public TaxReturn(String pSsn, int pYear, String pLastName, BigDecimal pTaxableIncome) { setSsn(pSsn); setYear(pYear); setLastName(pLastName); setTaxableIncome(pTaxableIncome); } public String toString() {return new ToStringBuilder(this).append("ssn", ssn).append("year", year).append("lastName",lastName).toString();}public int hashCode() {return new HashCodeBuilder(3, 7).append(ssn).append(year).toHashCode();}public boolean equals(Object pObject) {boolean equals = false;if (pObject instanceof TaxReturn) {TaxReturn bean = (TaxReturn) pObject;equals = (new EqualsBuilder().append(ssn, bean.ssn).append(year, bean.year)).isEquals();}return equals;}public int compareTo(Object pObject) {return CompareToBuilder.reflectionCompare(this, pObject);}}public class MainClass {public static void main(String[] pArgs) throws Exception {TaxReturn return1 = new TaxReturn("012-68-3242", 1998, "O'Brien", new BigDecimal(43000.00));TaxReturn return2 = new TaxReturn("012-68-3242", 1999, "O'Brien", new BigDecimal(45000.00));TaxReturn return3 = new TaxReturn("012-68-3242", 1999, "O'Brien", new BigDecimal(53222.00));System.out.println("ToStringBuilder: " + return1.toString());}
}

运行结果如下: 
ToStringBuilder: TaxReturn@1503a3[ssn=012-68-3242,year=1998,lastName=O'Brien]

2、ToStringBuilder的reflectionToString方法

 该方法主要是把类对应的基本属性和值输出来。如:

public class MainClass {

public static void main(String[] args) {MyClass one = new MyClass("Becker", 35);MyClass two = new MyClass("Becker", 35);MyClass three = new MyClass("Agassi", 33);System.out.println("One>>>" + one);System.out.println("Two>>>" + two);System.out.println("Three>>>" + three);System.out.println("one equals two? " + one.equals(two));System.out.println("one equals three? " + one.equals(three));System.out.println("One HashCode>>> " + one.hashCode());System.out.println("Two HashCode>>> " + two.hashCode());System.out.println("Three HashCode>>> " + three.hashCode());
}

}

class MyClass {

private String name = null;
private int age = 0;public MyClass(String name, int age) {this.name = name;this.age = age;
}public boolean equals(Object obj) {return EqualsBuilder.reflectionEquals(this, obj);
}public String toString() {return ToStringBuilder.reflectionToString(this,ToStringStyle.MULTI_LINE_STYLE);
}public int hashCode() {return HashCodeBuilder.reflectionHashCode(this);
}


运行结果如下:

One»>MyClass@743399[ 
name=Becker 
age=35 

Two»>MyClass@1d8957f[ 
name=Becker 
age=35 

Three»>MyClass@3ee284[ 
name=Agassi 
age=33 

one equals two? true 
one equals three? false 
One HashCode»> 462213092 
Two HashCode»> 462213092 
Three HashCode»> -530629296

ToStringStyle参数说明:

  1. DEFAULT_STYLE 
    com.entity.Person@182f0db[name=John Doe,age=33,smoker=false]
  2. MULTI_LINE_STYLE 
    com.entity.Person@182f0db[ 
    name=John Doe 
    age=33 
    smoker=false 
    ]
  3. NO_FIELD_NAMES_STYLE 
    com.entity.Person@182f0db[John Doe,33,false]
  4. SHORT_PREFIX_STYLE (即截去了包名) 
    Person[name=John Doe,age=33,smoker=false]
  5. SIMPLE_STYLE 
    John Doe,33,false

附加:

无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数。你可知道,有很多现成的工具类可用,并且代码质量都很不错,不用你写,不用你调试,只要你发现。

  在 Apache Jakarta Common 中, Lang 这个 Java 工具包是所有 Apache Jakarta Common 项目中被使用最广泛的,几乎你所知道的名气比较大的软件里面都有用到它,包括 Tomcat, Weblogic, Websphere, Eclipse 等等。我们就从这个包开始介绍整个 common 项目。

Lang 中工具类比较多,这里介绍几个主要的: 
  ClassUtils: getShortClassName,这个函数应该在 java.lang.Class 类中有的,我看到很多人自己写这个函数。getAllInterfaces,convertClassNamesToClasses,isAssignable,primitivesToWrappers,isInnerClass。 
  NumberUtils: 关于数字以及数字和字符串转换的类 stringToInt,toDouble,createNumber,isAllZeros, int compare(float lhs, float rhs), isNumber(String str),double min(double[] array)。 
  RandomUtils: 用于产生随机数的。 
  DateFormatUtils: 日期时间格式转换,以及本地时间和 UTC 时间转换。 
  DateUtils: 日期工具类。isSameDay,truncate,round,modify。

  基于反射机制的几个类: 
  CompareToBuilder: 比较,用在算法、排序、比较的地方。reflectionCompare,append。 
  EqualsBuilder: 通过反射机制比较。reflectionEquals 很多项目中用到。 
  HashCodeBuilder: 可以通过反射生成 hash code,很多算法的地方涉及到 hash code,但是并不是每个人都知道一种 hash code 的生成方法。 
  ToStringBuilder: 当你需要重载 toString 函数而不想写代码把当前类的所有成员信息列出来,可以用这个函数。

  其它的几个类我用得比较少: 
  SerializationUtils Java中得序列化比较奥妙,容易出错啊。 
  SystemUtils 可以读取一些关于 jdk 信息,操作系统信息的工具类。

java-ToStringBuilder介绍相关推荐

  1. 流行的9个Java框架介绍: 优点、缺点等等

    流行的9个Java框架介绍: 优点.缺点等等 在 2018年,Java仍然是世界上最流行的编程语言.它拥有一个巨大的生态系统,在全世界有超过900万Java开发人员.虽然Java不是最直接的语言,但是 ...

  2. Android下HelloWorld项目的R.java文件介绍

    R.java文件介绍 HelloWorld工程中的R.java文件 package com.android.hellworld; public final class R {     public s ...

  3. java英语介绍_java,英文介绍项目.doc

    java,英文介绍项目 java,英文介绍项目 篇一:Java开发常见英文 Java基础常见英语词汇(共70个) Author:ZW OO: object-oriented ,面向对象OOP: obj ...

  4. Java命令学习系列(零)——常见命令及Java Dump介绍

    Java命令学习系列(零)--常见命令及Java Dump介绍 一.常用命令: 在JDK的bin目彔下,包含了java命令及其他实用工具.  jps:查看本机的Java中进程信息.  jstack ...

  5. java coin介绍_代码示例中的Java 7:Project Coin

    java coin介绍 该博客通过代码示例介绍了一些新的Java 7功能,这些项目在Project Coin一词下进行了概述. Project Coin的目标是向JDK 7添加一组小的语言更改.这些更 ...

  6. java hadoop api_Hadoop 系列HDFS的Java API( Java API介绍)

    HDFS的Java API Java API介绍 将详细介绍HDFS Java API,一下节再演示更多应用. Java API 官网 如上图所示,Java API页面分为了三部分,左上角是包(Pac ...

  7. js 中转换成list集合_程序员:java集合介绍-List,具说很详细,你不来看看?

    Java集合介绍 作为一个程序猿,Java集合类可以说是我们在工作中运用最多.最频繁的类.相比于数组(Array)来说,集合类的长度可变,更加方便开发. Java集合就像一个容器,可以存储任何类型的数 ...

  8. protobuf 3.5 java使用介绍(二)

    protobuf 3.5 java使用介绍(二) 上一篇遗留了两个问题: 1,数据模型中有可能会出现数组格式,而数组里面是一个其他的模型,这个怎么来做? 2,构建数据消息的时候,通常会有一个头,一个体 ...

  9. java自我介绍_口语化java自我介绍

    口语化java自我介绍 自我介绍是对个人特点的总结与归纳.一个好的自我介绍可以让HR很快地了解自己,欣赏自己.下面小编为大家整理了口语化java自我介绍,希望大家喜欢. 口语化java自我介绍(一) ...

  10. java英语介绍_java自我介绍英语口语

    <java自我介绍英语口语>由会员分享,可在线阅读,更多相关<java自我介绍英语口语(6页珍藏版)>请在人人文库网上搜索. 1.java自我介绍英语口语 java技术的同学们 ...

最新文章

  1. 警惕!银行风控模型或将“摇身一变”,成为风险缔造者
  2. 收藏 | 最全中科大计算机学院课程资源(含答案)
  3. Day 31 并发编程
  4. Java基础提升篇:equals()与hashCode()方法详解
  5. Python工程师具备哪些技能才能提升求职机率?
  6. 块元素与行内元素转化(display属性)
  7. python生成随机数方法_详解用python生成随机数的几种方法
  8. DirectX修复工具全部文件修复失败或下载失败的解决方法
  9. 【MySQL-关键字】MySQL中的desc什么意思?有哪些作用?
  10. 第十三章:相关方管理
  11. 微信小程序之头像裁剪,添加字幕,生成新图片下载等 解决真机调试和开发者工具 图片不显示等问题
  12. Xcode6 app沙盒目录
  13. pythonjson数据解析错误是什么意思_json解析错误怎么办?
  14. 路由器上端口转发_如何在路由器上转发端口
  15. 正确计算linux系统内存使用率
  16. 东北农业大学计算机科学与技术复试名单,复试通知来了!150余所高校已发布最新复试信息!...
  17. ubuntu不支持安装搜狗_ubuntu搜狗输入法安装失败,导致无法进入桌面
  18. django框架基于Python实现的作业查重系统
  19. Python操作MySQL将文件信息制作成表(以裁判文书为例)
  20. 国内有哪些好用的 Online Judge

热门文章

  1. Android 序列帧动画
  2. hadoop大数据生态概述
  3. mnist数据集python导入_Python读取MNIST数据集
  4. caffee 安装教程
  5. WinForm界面控件Telerik UI for WinForm入门指南教程
  6. 问卷星的自动答题脚本
  7. 南广学院计算机清考,请问下中国传媒大学南广学院补考和重修要收费吗
  8. JavaScript等于 == 与 恒等于 === 的区别
  9. 大数据之Hadoop命令
  10. python前端和后端_python是用于前端还是后端开发