`

ToStringBuilder和ToStringStyle(覆盖每个实体的 toString 方法)

    博客分类:
  • J2SE
 
阅读更多
转自:1、http://blog.csdn.net/cuker919/article/details/6120920
     2、http://rmn190.iteye.com/blog/349479

今天系统要打印日志,发现所有实体的toString()方法 都用的是简单的"+",因为每"+" 一个就会 new 一个 String 对象,

这样如果系统内存小的话会暴内存(前提系统实体比较多)。








由于打印的时候包含包名,感觉太长了,
使用ToStringStyle.SHORT_PREFIX_STYLE 截掉包名
 
import java.lang.reflect.Field;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;


@Override
public String toString() {
//以前的“+”写法
/*return "HolidayConfig [end_date=" + end_date + ", holiday_date="
+ holiday_date + ", holiday_id=" + holiday_id
+ ", holiday_name=" + holiday_name + ", holiday_type="
+ holiday_type + ", state=" + state + "]";*/

//现在平常实体调用的方法
return ToStringBuilder.reflectionToString(this,ToStringStyle.SHORT_PREFIX_STYLE);


//user实体不打印password机密信息使用方法
return (new ReflectionToStringBuilder(this) {
  protected boolean accept(Field f) {
              return super.accept(f) && !f.getName().equals("password");
          }
      }).toString();
}


打印样列:
com.domain.entity.parameterconfig.HolidayConfig@60aeb0[holiday_id=11,holiday_name=6666,end_date=<null>,holiday_type=1,state=<null>]

截掉包名后只剩下类名:
TariffTimeSpan[tariffTimeSpanPK=TariffTimeSpanPK[time_span_id=123456,favor_type=1,time_begin=<null>],time_span_name=<null>,time_end=<null>,discount=115,eff_time=Thu Jan 06 17:31:10 CST 2011,exp_time=Sun Jan 06 17:31:10 CST 4109,staff_id=<null>,create_time=<null>]










参考资料:
http://rmn190.javaeye.com/blog/349479


---------------------------------------------------------------------------------



ToStringBuilder用于生成对象的toString方法,在MiddleGen中比较常见。它的核心是使用ToStringStyle生成字符串。所以对其分析是建立在对ToStringStyle的分析之上的。

1.私有变量
ToStringStyle defaultStyle;缺省的Style,缺省赋值为ToStringStyle.DEFAULT_STYLE。
StringBuffer buffer;用于连接所有内容的SB。
Object object;需要输出的对象。
ToStringStyle style;所使用的Style。

2.构造函数
ToStringBuilder的构造函数必须最少包含需要输出的对象,另外也可以在构函中指定buffer和style。下面只描述全参数的处理过程:
 
如果style为空,则使用缺省的style。
  如果buffer为空,则新生成一个大小为512的StringBuffer。
  利用参数对object变量赋值。
  利用style的appendStart输出开始标记。

3.append方法
append方法可以把参数中的原始类型或对象类型连接到该对象的buffer中。append方法利用了Decorator模式,所以最后都返回本对象。
3.1 单个原始类型变量和Object变量的append方法
这种方法的参数为一个原始类型变量或Object变量,但参数中可能含有FieldName,也可以没有。
boolean利用style的对应append方法进行输出,其中如果没提供FieldName,置null。
byte,char,double,float,int,long,Object同上

3.2 数组类型的append方法
这种方法的参数为一个包含原始类型变量或Object变量的数组,但参数中可能含有FieldName,也可以没有。如果含有FieldName,参数中可能含有是否输出细节的布尔变量fullDetail,也可能没有。
boolean利用style的对应append方法进行输出,其中如果没提供FieldName,置null。如果提供了FieldName,而没有提供fullDetail,则fullDetail置null。否则利用BooleanUtils的toBooleanObject把boolean变量转换为Boolean.TRUE或Boolean.FALSE。
byte,char,double,float,int,long,Object,short同上

4.reflectionToString族
这组方法使用静态方式,提供对对象字段的自动映射和输出的功能,其原理采用ReflectionToStringBuilder的对应toString方法处理。

5.toString方法
toString方法输出最后的字符串。执行以下操作:
  如果object为空,则利用style的getNullText方法输出空标记。
  否则利用style的appendEnd输出结束标记。
  返回buffer的toString方法。

6.其它
6.1 appendAsObjectToString方法
同ToStringStyle的appendCyclicObject方法。

6.2 appendSuper方法
同ToStringStyle的同名方法。

6.3 appendToString方法
同ToStringStyle的同名方法。
分享到:
评论

相关推荐

    java toString ToStringBuilder ReflectionToStringBuilder

    在Java编程中,`toString()`方法是一个非常关键的成员函数,它用于返回对象的字符串表示形式,通常包含类名和对象的属性值。当我们需要打印或调试对象时,`toString()`方法尤其有用。本篇文章将深入探讨几种在Java中...

    ToStringBuilder类的一些心得

    Apache Commons Lang库提供了一个非常实用的工具类——ToStringBuilder,它使得对象的toString方法实现变得简洁且可定制化。下面我们将深入探讨ToStringBuilder类的使用方法和技巧。 ToStringBuilder是包`org....

    Java组件开发(1)ToStringBuilder

    Java组件开发(1)ToStringBuilder

    万能的toString

    但通常我们都需要为自定义类覆盖这个方法,提供更具语义的信息,以便更好地理解和调试代码。 1. **覆盖toString()** 当你创建一个自定义类时,如果希望打印出类实例的属性值,需要在类中重写`toString()`。通常,...

    JakartaCommons 详细教程更助于你的基础

    - ToStringBuilder和ToStringStyle:用于自定义对象的toString()方法输出格式。 2. Jakarta Commons Collections Commons Collections库为Java标准集合框架提供了扩展。它包含以下组件: - Bag:存储对象的集合,...

    工具类-tools

    在自定义类的`toString()`方法时,可以使用`ToStringBuilder`和`ReflectionToStringBuilder`,它们接受`ToStringStyle`作为参数,生成不同风格的`toString()`输出。 使用Apache Commons Lang的工具类可以提高代码的...

    commons-lang3-3.3.2

    `ToStringBuilder`提供了创建自定义`toString()`实现的方法,使得在调试和日志记录中更容易理解对象的状态。它可以包含对象的所有字段,使得输出的信息更详细且易于阅读。 Apache Commons Lang的这些工具类使得...

    apache-commons-lang.zip 源码

    `ToStringBuilder`则帮助创建对象的toString()方法输出,使得调试和日志记录更加方便。 Lang项目中还包括一些枚举相关的工具,如`EnumUtils`,以及`SystemUtils`,它提供了关于运行环境的一些信息,如Java版本、...

    Apache commons jar包常用类讲解--Jakarta Commons 学习.pdf

    - **ToStringStyle**和**StandardToStringStyle**:提供了不同的`toString`样式。 ##### 1.3. commons.lang.math包 提供了额外的数学工具方法,如数字范围检查、随机数生成等。 ##### 1.4. commons.lang.time包 ...

    Jakarta+Commons中文介绍

    **ToStringBuilder** 类简化了toString方法的编写过程,可以通过添加不同的属性来构建字符串表示形式。 ##### ToStringStyle和StandardToStringStyle **ToStringStyle** 接口定义了toString方法的格式风格,而**...

    使用 Eclipse 调试 Java 程序的几个技巧

    - **使用`ToStringBuilder`:** Apache Commons Lang 库中的`ToStringBuilder`可以帮助构建一个良好的`toString()`方法,它提供了多种方法来生成清晰、一致的字符串表示。 #### 四、其他调试技巧 **不要过度依赖...

    apache commons 帮助文档电子书

    - ToStringBuilder:用于快速构建toString()方法逻辑。 ***mons BeanUtils库提供了操作Java Bean属性的工具方法。包括: - BeanUtils:提供基本的属性操作如拷贝属性、设置属性值等。 - PropertyUtils:提供了...

    apache commons 包最新使用指南(2009英文)

    - **解决方案**:利用 Commons Lang 的 `ToStringBuilder` 类自动生成 `toString()` 方法。 - **讨论**: - `ToStringBuilder` 允许开发者指定哪些字段应该包含在最终的字符串中,并且支持自定义格式。 - 通过这种...

    commons-lang3-3.1.jar

    - `ToStringBuilder` 和 `ReflectionToStringBuilder` 帮助创建对象的自定义toString方法。 Apache Commons Lang 3.6 还包含了其他很多实用工具类和方法,它们都是为了提高Java开发的效率和代码质量。这个库已经被...

    kassava:该库提供了一些有用的kotlin扩展函数,用于在没有所有样板的情况下实现toString(),hashCode()和equals()

    该库的主要动机是用于无法使用数据类且需要通过以下方式实现toString() / equals() / hashCode()的情况: 手工制作自己的:( 使用IDE生成的方法:( 使用Apache Common的和 可定制的toString()格式(可以复制Kotlin的...

    Java - Learning Java Language

    每个主要版本都会有一些新特性和改进。例如,Java 8引入了流(Stream)和Lambda表达式等功能。 **安装Java** 安装Java通常涉及下载Java Development Kit (JDK),这是开发Java程序所必需的。安装过程会根据操作系统...

    commons-lang3-3.7

    `Builder` 包中的类如 `ToStringBuilder`, `HashCodeBuilder` 提供了一种构建对象的toString()和hashCode()方法的简便方式,遵循了良好的编程实践。 9. **枚举工具** `EnumUtils` 提供了枚举相关的辅助方法,如...

    commons-lang常用

    最后,`ToStringBuilder`简化了`toString`方法的实现,使得对象状态的输出更加直观和易于调试。它支持添加任意数量的对象属性到构建器中,最终生成一个清晰的字符串表示形式。 综上所述,`commons-lang`库以其丰富...

    看例子练apache_commons之lang篇

    这三个类都是为了方便地创建 `equals()`、`hashCode()` 和 `toString()` 方法。 - **EqualsBuilder**: 构建 `equals()` 方法。 - **HashCodeBuilder**: 构建 `hashCode()` 方法。 - **ToStringBuilder**: 构建 `...

    java-对象数组转换为json

    应使用`JSONArray`构造函数或`JSONArray.fromObject()`方法,但`fromObject()`是`org.apache.commons.lang3.builder.ToStringBuilder`的方法,而不是`JSONArray`的),将列表转换为`JSONArray`,最后调用`toString()...

Global site tag (gtag.js) - Google Analytics