一、简介与引入
   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 信息,操作系统信息的工具类。

转载于:https://www.cnblogs.com/SaraMoring/p/5609801.html

ToStringBuilder学习总结相关推荐

  1. ToStringBuilder学习(三):readResolve()方法与序列化

    在ToStringBuilder学习(一)中提到一个问题,即 readResolve方法是干啥的? 当时也没多想, 只是列在那里, 今天忙里偷闲地把搜点材料整理下这个问题. 原来这个方法跟对象的序列化 ...

  2. Java 学习文章汇总

    目前JAVA可以说是产业界和学术界最热门的语言,许多人都很急切想把JAVA学好. 但学习是需要步骤的,除非像电影中演的那样,能够把需要的专业技巧下载到脑海:主角只花了几秒下载资料,就马上具备飞行员的技 ...

  3. java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】

    类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...

  4. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  5. FastAI 2019课程学习笔记 lesson 2:自行获取数据并创建分类器

    文章目录 数据获取 google_images_download 的安装和使用 挂载google 个人硬盘到Google colab中 删除不能打开文件 创建ImageDataBunch 训练模型 解 ...

  6. FastAI 课程学习笔记 lesson 1:宠物图片分类

    文章目录 代码解析 神奇的"%" 导入fastAI 库 下载解压数据集 untar_data 获取帮助文档 help() ? ?? doc 设置路径 get_image_files ...

  7. 深度学习学习指南-工具篇

    colab Colab是由Google提供的云计算服务,通过它可以让开发者很方便的使用google的免费资源(CPU.GPU.TPU)来训练自己的模型. 学习经验总结 如何使用命令行? 通过!+cmd ...

  8. Redis学习之路(一)--下载安装redis

    redis学习之路--下载安装redis windows安装redis 1.下载redis 2.安装 3.查看是否安装成功 windows安装redis 1.下载redis 网址:https://gi ...

  9. python内置库之学习configparser库(一)

    python内置库之学习configparser库(一) 1.引言 ini文件简介 [节] 键=值 注:节不能重复出现 2.自己封装了一个增删改查的类,可以参考一下 import configpars ...

  10. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

最新文章

  1. Kafka背后公司获1.25亿融资,估值超25亿美元
  2. PowerDesigner 小工具窗
  3. Linux安装python3.6 和pip
  4. OS / 线程的 3 种实现方式(内核级,用户级 和 混合型)
  5. 逻辑备库的Swichover和Failover
  6. python选择题题库for、if_Python题目1:猜年龄(for、if else和where)
  7. java list 面试题_java【集合】面试题
  8. 在python中用递归的方法编程_python基础之函数,递归,内置函数
  9. linux重装hal服务安装,linux ubuntu 安装微信客户端
  10. perl 安装html,centos perl 安装HTML-Parser时报错
  11. ABP源码分析三十六:ABP.Web.Api
  12. python输入一个字符串、输出他的所以组合_Swift - 排列组合之全排列 (输入一个字符串,输出该字符串包含的字符的所有组合)...
  13. 企业五大模式,多看两遍你就懂了
  14. 苹果市值突破2万亿美元;华为推出PC版HMS“擎云生态”;Android11将强制应用使用内置相机| 极客头条...
  15. java 判断端口是否开放telnet
  16. Linux文件系统Ext2,Ext3,Ext4性能大比拼
  17. 65lbc184应用电路原理_控制电路设计经验技巧分享
  18. 知网显示html,使用知网HTML阅读的正确姿势
  19. 超详细!基于树莓派Python编程使用dht11温湿度模块
  20. 南京毕业生租房补贴发票开具地点一览表

热门文章

  1. Maven的安装与配置(详细版)
  2. vosviewer保存成PDF文件时没有文字
  3. vs2013实现duilib结合cef的demo
  4. X96 MAX变砖后usb烧录修复(by quqi99)
  5. vs2010 添加nupkg文件
  6. 轻松下载网易云音乐中的歌曲
  7. GB28181协议之语音对讲
  8. ADMM算法框架(未完待续 持续更新)
  9. hi3559_imx334_sensor修改配置1080P60
  10. python判断手机号码是否正确_python检测手机号码是否合法