java-ToStringBuilder介绍
之前都是直接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参数说明:
- DEFAULT_STYLE
com.entity.Person@182f0db[name=John Doe,age=33,smoker=false] - MULTI_LINE_STYLE
com.entity.Person@182f0db[
name=John Doe
age=33
smoker=false
] - NO_FIELD_NAMES_STYLE
com.entity.Person@182f0db[John Doe,33,false] - SHORT_PREFIX_STYLE (即截去了包名)
Person[name=John Doe,age=33,smoker=false] - 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介绍相关推荐
- 流行的9个Java框架介绍: 优点、缺点等等
流行的9个Java框架介绍: 优点.缺点等等 在 2018年,Java仍然是世界上最流行的编程语言.它拥有一个巨大的生态系统,在全世界有超过900万Java开发人员.虽然Java不是最直接的语言,但是 ...
- Android下HelloWorld项目的R.java文件介绍
R.java文件介绍 HelloWorld工程中的R.java文件 package com.android.hellworld; public final class R { public s ...
- java英语介绍_java,英文介绍项目.doc
java,英文介绍项目 java,英文介绍项目 篇一:Java开发常见英文 Java基础常见英语词汇(共70个) Author:ZW OO: object-oriented ,面向对象OOP: obj ...
- Java命令学习系列(零)——常见命令及Java Dump介绍
Java命令学习系列(零)--常见命令及Java Dump介绍 一.常用命令: 在JDK的bin目彔下,包含了java命令及其他实用工具. jps:查看本机的Java中进程信息. jstack ...
- java coin介绍_代码示例中的Java 7:Project Coin
java coin介绍 该博客通过代码示例介绍了一些新的Java 7功能,这些项目在Project Coin一词下进行了概述. Project Coin的目标是向JDK 7添加一组小的语言更改.这些更 ...
- java hadoop api_Hadoop 系列HDFS的Java API( Java API介绍)
HDFS的Java API Java API介绍 将详细介绍HDFS Java API,一下节再演示更多应用. Java API 官网 如上图所示,Java API页面分为了三部分,左上角是包(Pac ...
- js 中转换成list集合_程序员:java集合介绍-List,具说很详细,你不来看看?
Java集合介绍 作为一个程序猿,Java集合类可以说是我们在工作中运用最多.最频繁的类.相比于数组(Array)来说,集合类的长度可变,更加方便开发. Java集合就像一个容器,可以存储任何类型的数 ...
- protobuf 3.5 java使用介绍(二)
protobuf 3.5 java使用介绍(二) 上一篇遗留了两个问题: 1,数据模型中有可能会出现数组格式,而数组里面是一个其他的模型,这个怎么来做? 2,构建数据消息的时候,通常会有一个头,一个体 ...
- java自我介绍_口语化java自我介绍
口语化java自我介绍 自我介绍是对个人特点的总结与归纳.一个好的自我介绍可以让HR很快地了解自己,欣赏自己.下面小编为大家整理了口语化java自我介绍,希望大家喜欢. 口语化java自我介绍(一) ...
- java英语介绍_java自我介绍英语口语
<java自我介绍英语口语>由会员分享,可在线阅读,更多相关<java自我介绍英语口语(6页珍藏版)>请在人人文库网上搜索. 1.java自我介绍英语口语 java技术的同学们 ...
最新文章
- 警惕!银行风控模型或将“摇身一变”,成为风险缔造者
- 收藏 | 最全中科大计算机学院课程资源(含答案)
- Day 31 并发编程
- Java基础提升篇:equals()与hashCode()方法详解
- Python工程师具备哪些技能才能提升求职机率?
- 块元素与行内元素转化(display属性)
- python生成随机数方法_详解用python生成随机数的几种方法
- DirectX修复工具全部文件修复失败或下载失败的解决方法
- 【MySQL-关键字】MySQL中的desc什么意思?有哪些作用?
- 第十三章:相关方管理
- 微信小程序之头像裁剪,添加字幕,生成新图片下载等 解决真机调试和开发者工具 图片不显示等问题
- Xcode6 app沙盒目录
- pythonjson数据解析错误是什么意思_json解析错误怎么办?
- 路由器上端口转发_如何在路由器上转发端口
- 正确计算linux系统内存使用率
- 东北农业大学计算机科学与技术复试名单,复试通知来了!150余所高校已发布最新复试信息!...
- ubuntu不支持安装搜狗_ubuntu搜狗输入法安装失败,导致无法进入桌面
- django框架基于Python实现的作业查重系统
- Python操作MySQL将文件信息制作成表(以裁判文书为例)
- 国内有哪些好用的 Online Judge