一、简介与引入
  
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. JAVA项目如何打开,打开乱码怎么办,字体太小怎么办,感叹号是什么情况

    打开java项目 Finish 汉字乱码改这里 字体大小改在第一个的 Appearance里面 项目前面有感叹号,都是tomcat和jdk配置有问题

  2. 初步学习React Router 4.0

      React Router 4.0 是react官方推荐的路由库.4是已经正式发布的最新版本. 初始化项目启动之后: npm run eject 弹出配置文件.自定义配置webpack 查看下pac ...

  3. [Java基础] java的守护线程与非守护线程

    最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) ,(PS:以 ...

  4. [Android自定义控件] Android Scroller工具类和GestureDetector的简单用法

    转载:http://ipjmc.iteye.com/blog/1615828 Android里Scroller类是为了实现View平滑滚动的一个Helper类.通常在自定义的View时使用,在View ...

  5. sqlserver中事务总结:begin tran,rollback tran,commit tran

     第1个相关用法:摘自:https://shiyousan.com/post/f13d29b7-0d87-4168-bd8b-8b28b0991b5a 以下是出现错误的SQL部分语句: 此错误的原因是 ...

  6. Struts2中的页面跳转

    内容源自:Struts2中的页面跳转 一.全局页面的设置如果<package>包中的一些action都返回success,并且返回的页面都是同一个JSP页面,这样就可以配置全局的结果页面. ...

  7. swift基础语法之控件使用02

    //第一个控制器:显示基础控件 import UIKit class ViewController: UIViewController { var label: UILabel = UILabel() ...

  8. 常用命令(过滤、管道、重定向、ping 命令、netstat 命令、ps命令)

    常用命令 过滤 过滤出 /etc/passwd 文件中包含 root 的记录 grep 'root' /etc/passwd 递归地过滤出 /var/log/ 目录中包含 linux 的记录 grep ...

  9. linux中mysql主从备份

    在centos中安装mysql详细步骤说明 条件:需要两个虚拟机,一台为主服务器master,一台为从服务器slave 1     在master主服务中,创建用于同步的用户 mysql> gr ...

  10. 视频质量评价方法:VQM

    如何确定一个视频质量的好坏一直以来都是个棘手的问题.目前常用的方法就是通过人眼来直接观看,但是由于人眼的主观性及观看人员的单体差异性,对于同样的视频质量,不同的人的感受是不一样的.为此多个研究机构提出 ...