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

ToStringBuilder学习(一):常用方法介绍的更多相关文章

  1. java基础-Integer类常用方法介绍

    java基础-Integer类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需 ...

  2. 基于StringUtils工具类的常用方法介绍(必看篇)

    前言:工作中看到项目组里的大牛写代码大量的用到了StringUtils工具类来做字符串的操作,便学习整理了一下,方便查阅. isEmpty(String str) 是否为空,空格字符为false is ...

  3. 人工智能深度学习Caffe框架介绍,优秀的深度学习架构

    人工智能深度学习Caffe框架介绍,优秀的深度学习架构 在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...

  4. iOS学习之NSBundle介绍和使用

    iOS学习之NSBundle介绍和使用 http://blog.csdn.net/totogo2010/article/details/7672271 新建一个Single View Applicat ...

  5. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

  6. Oracle GoldenGate学习之Goldengate介绍

    Oracle GoldenGate学习之Goldengate介绍 (2012-10-02 17:07:27) 标签: 检查点 数据传输 队列 进程 分类: Goldengate Goldengate介 ...

  7. java基础-BigDecimal类常用方法介绍

    java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...

  8. java基础-BigInteger类常用方法介绍

    java基础-BigInteger类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigInteger类概述 Java中long型为最大整数类型,对于超过long ...

  9. java基础-Arrays类常用方法介绍

    java基础-Arrays类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Array类的概念 此类包含用来操作数组(比如排序和搜索)的各种方法.需要注意,如果指定 ...

  10. java基础-Math类常用方法介绍

    java基础-Math类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Math类概念 Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函 ...

随机推荐

  1. JS跳转页面的几种方法

    JS的几种跳转方式: 1. window.open(”url“) 2.用自定义函数 <script> function openWin(tag,obj) { obj.target=&quo ...

  2. NGUI自适应屏幕分辨率

    unity官方承诺的新ui系统一直没有推出来,我们的UI使用的是原生的OnGUI系统,刚好UI需要改版,索性就想迁到NGUI上面来,于是看了一下NGUI源码,发现NGUI可以大大的降低DrawCall ...

  3. unity3d由多个部分组成一个角色

    摘自http://forum.unity3d.com/threads/16485-quot-stitch-multiple-body-parts-into-one-character-quot So ...

  4. PhpStorm 对 AngularJS 的支持

    非常喜爱用AngularJS来构建web应用程序的前端吗? PhpStorm 使得在其上进行 AngularJS 相关的工作同其它得到IDE支持的编程语言的工作一样容易! AD:51CTO首届中国AP ...

  5. Verilog语法

    语法子集很小,易用. 模块:module…endmodule 端口:input,output,inout(双向特殊) inout比较难用,有一张真值表,需要大家观察后书写,基本原则就是输入时一定是高阻 ...

  6. IP地址转换、主机大小端、htonl、ntohl实现

    copy   #include <IOSTREAM> //#include <WINSOCK.H> using std; typedef  uint16; unsigned   ...

  7. shell遍历文件夹并执行命令

    背景: 有一个源码包里面包含很多子目录和makefile,打包后的压缩包太大,需要将make生成的所有二进制文件删除然后再打包. 需求: 因此,要求在制定目录的所有递归子目录中执行make clean ...

  8. intellij idea使用maven本地仓库及修改本地仓库路径

    什么maven本地仓库,默认是用户目录下的.m2/repository这个文件. idea是自带maven插件的不用我们再,怎么把依赖包下载到我们的本地仓库呢?一般是idea默认了路径,而且idea是 ...

  9. CentOS 6.5 源码安装subversion-1.8.8,附加mod_dav_svn模块

    题记:第一次写如此实践类的博文,都是亲身经历,折腾了大半天,仅记录供参考.(新手实践,有错误之处欢迎纠正.) 安装前准备: 1.已安装JDK1.7,并配置好环境变量. 2.已安装apr.apr-uti ...

  10. OpenCV中的矩阵和图像类型

    任务刚刚做完,就迫不及待的来写写在OpenCV中常见的几类数据类型: 在使用OpenCV时我们时常会碰到IplImage这个数据类型,IplImage就是我们通常说的“图像”进行编码的基本结构,这些图 ...