一、简介与引入
  
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. 如何将你的github仓库部署到github pages(github.io博客)

    详细的git教程:http://www.cnblogs.com/tugenhua0707/p/4050072.html#!comments 作为教程,很重要的一点就是要最大化的傻瓜化,本文将从新建一个 ...

  2. Vue脚手架(vue-cli)搭建和目录结构详解

    一.环境搭建 1.安装node.npm.webpack,不多说 2.安装vue-cli脚手架构建工具,打开命令行工具输入:npm install vue-cli -g,安装完成之后输入 vue -V( ...

  3. JS函数节流和函数防抖问题分析

    问题1:如果实现了dom拖拽功能,但是在绑定拖拽事件的时候发现每当元素稍微移动一点便触发了大量的回调函数,导致浏览器直接卡死,这个时候怎么办? 问题2:如果给一个按钮绑定了表单提交的post事件,但是 ...

  4. H5+CSS3简单动画 知识点 汇总

    乱入几个:  1.h5的一个语义化标签   figure :用于规定独立的流内容(图像 图表 照片 代码等)   figcapition:与figure配套使用,用于标签定义figure元素标题 2. ...

  5. hdu 4893Wow! Such Sequence!

    多校第三场 7题..线段树A的 #include <cstdio> #include <cstring> #include <iostream> #include ...

  6. wamp php.ini 配置的坑

    wampserver是windows平台下一键部署PHP+apache+MySQL的开发环境安装包,非常方便,但修改php.ini时需要注意,wamp目录下有两个php.ini, 第一个是apatch ...

  7. Windows安装和配置Tomcat

    1 从http://tomcat.apache.org下载Tomcat压缩包,我这里下的版本是7.0.67.   2 将Tomcat压缩包解压缩到任意路径下,我这里的解压缩路径为E:\tomcat-7 ...

  8. os.waitpid()无法获取sys.exit()退出时的status code

    [目的] 父进程使用os.waitpid()等待子进程退出,并检测子进程的exit code,以决定是否重启子进程. (常见的应用场景是:子进程接收外部命令,收到"stop"时退出 ...

  9. Game Center Achievements and Leaderboards part 1 <转>

    原地址:http://blog.sina.com.cn/s/blog_6b3661a901013xb0.html This is the first part of a step-by-step tu ...

  10. react 执行 yarn build 后 去除 .js.map 文件

    map文件是帮助我们查看报错的位置的. map文件由devtool属性控制,如果不想要map,注释掉就可以,大约webpack.config.prod.js第57行: // devtool: shou ...