一、简介与引入
  
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构造和解析Json数据的两种方法详解二——org.json

    转自:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/24/3096437.html 在www.json.org上公布了很多JAVA下的jso ...

  2. 万里长征第二步——django个人博客(第五步 ——配置后台admin)

    在urls.py文件中配置admin路径 from django.conf.urls import url from django.contrib import admin from blog.vie ...

  3. ISP图像调试工程师——自动曝光(熟悉3A算法)

    基于图像的自动曝光算法研究 : https://wenku.baidu.com/view/c854fa93fd0a79563c1e72ba.html

  4. 【笔记】选择框 change 事件获取内容

    还记得之前做过一次js 的联动效果,在获取下拉框change事件后的 value 时,当时的我做得比较费劲. 现在看了高程的表单脚本那一章之后发现有一个更好的方法,那就是直接获取下拉框change 事 ...

  5. Elasticsearch的javaAPI之query dsl-queries

    Elasticsearch的javaAPI之query dsl-queries 和rest query dsl一样,elasticsearch提供了一个完整的Java query dsl. 查询建造者 ...

  6. 封装实现JavaScript 文件的动态载入功能

    function loadScript(url, callback){ var script = document.createElement ("script") script. ...

  7. FastDFS安装配置过程中出现错误提示"/home/yuqing/fastdfs" can't be accessed, error info: No such file or directory

    解决: mkdir -p /home/yuqing/fastdfs 这回正常了,查看启动成功与否 [root@localhost FastDHT]# ps -ef |grep track |grep ...

  8. Unity5.1 新的网络引擎UNET(九) UNET 官方推荐视频教程

    孙广东  2015.7.14 在新的网络引擎出现之前,Unity提供的是 内置 Raknet网络引擎, 这一次Unity想更新UGUI一样,花了大的手笔更新了, UNET. 原来的旧的网络组件 被提示 ...

  9. JSP语法学习笔记

    1.修改JSP页面模版:找到MyEclips安装目录,搜索“Jsp.vtl”,找到该文件修改编码,以及一些不需要用到的代码. 2.查找项目生成的Servlet文件路径:查看当前项目父级目录搜索 .me ...

  10. 修改HTML5 input placeholder默认颜色

    WebKit和Blink(Safari,Google Chrome, Opera15+)使用伪元素 ::-webkit-input-placeholder Mozilla Firefox 4-18使用 ...