ToStringBuilder 学习

一、简介与引入
   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:
[email protected][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>>>[email protected][
  name=Becker
  age=35
]
Two>>>[email protected][
  name=Becker
  age=35
]
Three>>>[email protected][
  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
   [email protected][name=John
Doe,age=33,smoker=false]
2. MULTI_LINE_STYLE
    [email protected][
   name=John
Doe
   age=33
   smoker=false
]
3. NO_FIELD_NAMES_STYLE
   com.entity.[email protected][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
信息,操作系统信息的工具类。

转载: http://blog.sina.com.cn/s/blog_7ffb8dd50101aoxd.html

ToStringBuilder 学习

时间: 2024-12-17 12:56:25

ToStringBuilder 学习的相关文章

ToStringBuilder学习(三):readResolve()方法与序列化

在ToStringBuilder学习(一)中提到一个问题,即 readResolve方法是干啥的? 当时也没多想, 只是列在那里, 今天忙里偷闲地把搜点材料整理下这个问题. 原来这个方法跟对象的序列化相关(这样倒是解释了为什么 readResolve方法是private修饰的). ??? 怎么跟对象的序列化相关了? 下面我们先简要地回顾下对象的序列化. 一般来说, 一个类实现了 Serializable接口, 我们就可以把它往内存地写再从内存里读出而"组装"成一个跟原来一模一样的对象.

ToStringBuilder学习(一):常用方法介绍

一.简介与引入    1.ToStringBuilder.HashCodeBuilder.EqualsBuilder.ToStringStyle.ReflectionToStringBuilder.CompareToBuilder等这些类都是位于commons-lang.jar下面的,所以要使用这些类一定要导入commons-lang.jar. 2.为什么要使用ToStringBuilder? 系统中一般都要打印日志的,因为所有实体的toString()方法 都用的是简单的"+",因为

apache commons类库的学习

原文地址http://www.tuicool.com/articles/iyEbquE 1.1. 开篇 在Java的世界,有很多(成千上万)开源的框架,有成功的,也有不那么成功的,有声名显赫的,也有默默无闻的.在我看来,成功而默默无闻的那些框架值得我们格外的尊敬和关注,Jakarta Commons就是这样的一个框架.如果你至少参与了一个中型规模的Java项目,那么我想有超过一大半的机会你都接触和使用到了Jakarta Commons,不管你自己有没有察觉.就我所知,除了Apache Jakar

Java 学习文章汇总

目前JAVA可以说是产业界和学术界最热门的语言,许多人都很急切想把JAVA学好. 但学习是需要步骤的,除非像电影中演的那样,能够把需要的专业技巧下载到脑海:主角只花了几秒下载资料,就马上具备飞行员的技巧,或是武侠小说中的运功传送内力的方式,否则花上一段时间苦学是少不了的.花时间,不打紧,就怕方法错误,事倍功半. java 学习文章推荐.java学习线路.java 知识图谱. HTML5 微数据 RDFa/微格式 使用 jQuery 的 Autocomplete 插件实现input输入提示功能 创

Vue.js学习笔记:属性绑定 v-bind

v-bind  主要用于属性绑定,Vue官方提供了一个简写方式 :bind,例如: <!-- 完整语法 --> <a v-bind:href="url"></a> <!-- 缩写 --> <a :href="url"></a> 绑定HTML Class 一.对象语法: 我们可以给v-bind:class 一个对象,以动态地切换class.注意:v-bind:class指令可以与普通的class特

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

微信小程序学习总结(2)------- 之for循环,绑定点击事件

最近公司有小程序的项目,本人有幸参与其中,一个项目做下来感觉受益匪浅,与大家做下分享,欢迎沟通交流互相学习. 先说一下此次项目本人体会较深的几个关键点:微信地图.用户静默授权.用户弹窗授权.微信充值等等. 言归正传,今天分享我遇到的关于wx:for循环绑定数据的一个tips:  1. 想必大家的都知道wx:for,如下就不用我啰嗦了: <view class="myNew" wx:for="{{list}}">{{item.title}}<view

【安全牛学习笔记】

弱点扫描 ╋━━━━━━━━━━━━━━━━━━━━╋ ┃发现弱点                                ┃ ┃发现漏洞                                ┃ ┃  基于端口五福扫描结果版本信息(速度慢)┃ ┃  搜索已公开的漏洞数据库(数量大)      ┃ ┃  使用弱点扫描器实现漏洞管理            ┃ ╋━━━━━━━━━━━━━━━━━━━━╋ [email protected]:~# searchsploit Usage:

winform学习日志(二十三)---------------socket(TCP)发送文件

一:由于在上一个随笔的基础之上拓展的所以直接上代码,客户端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using Sys