`

apache commons包的ToStringBuilder.reflectionToString

 
阅读更多
ToStringBuilder、HashCodeBuilder、EqualsBuilder、ToStringStyle、ReflectionToStringBuilder、CompareToBuilder等这些类都是位于commons-lang.jar下面的,所以要使用这些类一定要导入commons-lang.jar。
     为什么要使用ToStringBuilder?
     系统中一般都要打印日志的,因为所有实体的toString()方法 都用的是简单的"+",因为每"+" 一个就会 new 一个 String 对象,这样如果系统内存小的话会暴内存(前提系统实体比较多)。使用ToStringBuilder就可以避免暴内存这种问题的。
    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
分享到:
评论

相关推荐

    org.apache.commons.lang jar包下载(commons-lang3-3.1.jar)

    org.apache.commons.lang.builder.ToStringBuilder.class org.apache.commons.lang.builder.ToStringStyle$DefaultToStringStyle.class org.apache.commons.lang.builder.ToStringStyle$MultiLineToStringStyle....

    org.apache.commons.lang jar包下载

    org.apache.commons.lang.builder.ToStringBuilder.class org.apache.commons.lang.builder.ToStringStyle$DefaultToStringStyle.class org.apache.commons.lang.builder.ToStringStyle$MultiLineToStringStyle....

    可用org.apache.commons.httpclient-3.1.0.jar.zip

    import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods....

    最新org.apache.commons.net..包完整、干净、实用

    标签中的"org.apache.commons.net.ftp"表明此包重点在于FTP(File Transfer Protocol)支持。FTP是一种用于在网络上进行文件传输的协议,Apache Commons Net库中的FTP组件提供了丰富的API,使得开发者可以轻松地在...

    org.apache.commons.net.ftp.FTPClient包

    org.apache.commons.net.ftp.FTPClient包,不错,在实际项目和产品中使用过。

    org.apache.commons.beanutils.jar

    这个库的核心是`org.apache.commons.beanutils`包,其中包含了大量的辅助方法,使得开发者可以更加便捷地处理JavaBean属性,避免了直接调用getter和setter方法的繁琐过程。 Apache Commons BeanUtils库的核心功能:...

    用org.apache.commons.net.ftp.FTPClient包实现简单文件下载

    在本文中,我们将深入探讨如何使用`org.apache.commons.net.ftp.FTPClient`包来实现简单的文件下载功能。这个过程涉及到几个关键步骤,包括连接到FTP服务器、登录、设置传输模式、下载文件以及断开连接。 首先,你...

    org.apache.commons.dbcp.BasicDataSource的解决方法

    在处理`org.apache.commons.dbcp.BasicDataSource`时,可能会遇到一些常见问题,如配置错误、连接泄漏、性能问题等。下面我们将详细探讨这些问题及其解决方案。 首先,`BasicDataSource`是DBCP库中的核心类,它实现...

    org.apache.commons.codec.jar

    在Java开发领域,Apache Commons是一个不可或缺的开源工具集,它提供了许多实用的组件,其中一个便是“Codec”模块,对应的库文件即为"org.apache.commons.codec.jar"。这个库文件是Apache Commons项目的一部分,...

    org.apache.commons.net.util.jar

    org.apache.commons.net.util.jar

    commons-lang.jar

    org.apache.commons.lang.builder.ToStringBuilder.class org.apache.commons.lang.builder.ToStringStyle$DefaultToStringStyle.class org.apache.commons.lang.builder.ToStringStyle$MultiLineToStringStyle....

    org.apache.commons.net.ftp.FTPClient jar包

    FTP应用的jar包,主要用于java开发FTP上传下载

    org.apache.commons.net.ftp.FTP**完整jar包

    .net.ftp.FTPClient jar ,exaple, commons-net-2.0.jar

    org.apache.commons.net.ftp的官方完整jar包

    org.apache.commons.net.ftp的官方完整jar包 放心使用

    org.apache.commons.codec包

    解决经常遇到的The import org.apache.commons.codec cannot be resolved问题,只需导入文件中的commons-codec-1.11.jar就可以,如和导入包就不赘述了。

    org.apache.commons.lang包

    标题中的"org.apache.commons.lang包"指的是该库的主要命名空间,它包含了各种实用工具类,如字符串处理、日期时间操作、类型转换等。 在描述中提到,解压缩Apache Commons Lang资源包后,我们可以获取到几个关键...

    2018年org.apache.commons.io jar包

    项目中需要 org.apache.commons.io.IOUtils的可以下载此包,fileupload组件依赖的commons-io组件

    java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource解决方案

    总之,要解决`java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource`的问题,你需要确保你的项目正确包含了Apache Commons DBCP及其相关依赖,并正确配置了`BasicDataSource`。同时,了解...

    org.apache.commons.io.FileUtils

    Apache Commons IO库中的`org.apache.commons.io.FileUtils`类是一个非常实用的工具类,它提供了大量方便、高效的方法,用于处理文件系统操作。这个类在Java开发中被广泛使用,尤其是在处理大量的文件读写和管理任务...

Global site tag (gtag.js) - Google Analytics