当前位置:   article > 正文

java-ToStringBuilder介绍_java tostringbuilder

java tostringbuilder

之前都是直接toString,今天看到了ToStringBuilder就想知道他的用处。

简单介绍:

1、

项目中一般都需要打印日志,所有实体的toString()方法都是用简单的"+",因为每"+" 一个就会 new 一个 String 对象,这样如果系统内存小的话会暴内存。使用ToStringBuilder就可以避免暴内存这种问题。

ToStringBuilder的reflectionToString方法:

  logger.info("请求数据:"+ToStringBuilder.reflectionToString(req));

2、

ToStringBuilder在包 common-lang 中,主要用于一个类的格式化输出。ToStringBuilder类中的append方法可以向该类添加基本类型、数组和对象 ,只有添加的方法才会被toString方法输出。
        ToStringStyle类则是对输出的内容进行格式化。

详细讲解

一、简介与引入 
1、ToStringBuilder、HashCodeBuilder、EqualsBuilder、ToStringStyle、ReflectionToStringBuilder、CompareToBuilder等这些类都是位于commons-lang.jar下面的,所以要使用这些类一定要导入commons-lang.jar。 
2、为什么要使用ToStringBuilder?

 系统中一般都要打印日志的,因为所有实体的toString()方法 都用的是简单的"+",因为每"+" 一个就会 new 一个 String 对象,这样如果系统内存小的话会暴内存(前提系统实体比较多)。使用ToStringBuilder就可以避免暴内存这种问题的。

二、示例学习 
1、ToStringBuilder的append方法

  1. ToStringBuilder类主要用于类的格式化输出。ToStringBuilder中append方法可以向该类添加基本类型、数组、和对象,只有添加的方法才会被toString输出。如:
  2. class TaxReturn {
  3. private String ssn;
  4. private int year;
  5. private String lastName;
  6. private BigDecimal taxableIncome;
  7. // get/set方法省略
  8. public TaxReturn() {
  9. }
  10. public TaxReturn(String pSsn, int pYear, String pLastName, BigDecimal pTaxableIncome) {
  11. setSsn(pSsn);
  12. setYear(pYear);
  13. setLastName(pLastName);
  14. setTaxableIncome(pTaxableIncome);
  15. }
  16. public String toString() {
  17. return new ToStringBuilder(this).append("ssn", ssn).append("year", year).append("lastName",
  18. lastName).toString();
  19. }
  20. public int hashCode() {
  21. return new HashCodeBuilder(3, 7).append(ssn).append(year).toHashCode();
  22. }
  23. public boolean equals(Object pObject) {
  24. boolean equals = false;
  25. if (pObject instanceof TaxReturn) {
  26. TaxReturn bean = (TaxReturn) pObject;
  27. equals = (new EqualsBuilder().append(ssn, bean.ssn).append(year, bean.year)).isEquals();
  28. }
  29. return equals;
  30. }
  31. public int compareTo(Object pObject) {
  32. return CompareToBuilder.reflectionCompare(this, pObject);
  33. }
  34. }
  35. public class MainClass {
  36. public static void main(String[] pArgs) throws Exception {
  37. TaxReturn return1 = new TaxReturn("012-68-3242", 1998, "O'Brien", new BigDecimal(43000.00));
  38. TaxReturn return2 = new TaxReturn("012-68-3242", 1999, "O'Brien", new BigDecimal(45000.00));
  39. TaxReturn return3 = new TaxReturn("012-68-3242", 1999, "O'Brien", new BigDecimal(53222.00));
  40. System.out.println("ToStringBuilder: " + return1.toString());
  41. }
  42. }

运行结果如下: 
ToStringBuilder: TaxReturn@1503a3[ssn=012-68-3242,year=1998,lastName=O'Brien]

2、ToStringBuilder的reflectionToString方法

 该方法主要是把类对应的基本属性和值输出来。如:

public class MainClass {

  1. public static void main(String[] args) {
  2. MyClass one = new MyClass("Becker", 35);
  3. MyClass two = new MyClass("Becker", 35);
  4. MyClass three = new MyClass("Agassi", 33);
  5. System.out.println("One>>>" + one);
  6. System.out.println("Two>>>" + two);
  7. System.out.println("Three>>>" + three);
  8. System.out.println("one equals two? " + one.equals(two));
  9. System.out.println("one equals three? " + one.equals(three));
  10. System.out.println("One HashCode>>> " + one.hashCode());
  11. System.out.println("Two HashCode>>> " + two.hashCode());
  12. System.out.println("Three HashCode>>> " + three.hashCode());
  13. }

}

class MyClass {

  1. private String name = null;
  2. private int age = 0;
  3. public MyClass(String name, int age) {
  4. this.name = name;
  5. this.age = age;
  6. }
  7. public boolean equals(Object obj) {
  8. return EqualsBuilder.reflectionEquals(this, obj);
  9. }
  10. public String toString() {
  11. return ToStringBuilder.reflectionToString(this,
  12. ToStringStyle.MULTI_LINE_STYLE);
  13. }
  14. public int hashCode() {
  15. return HashCodeBuilder.reflectionHashCode(this);
  16. }


运行结果如下:

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 信息,操作系统信息的工具类。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/657491
推荐阅读
相关标签
  

闽ICP备14008679号