`
wj98127
  • 浏览: 268005 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

org.apache.commons.lang.builder

    博客分类:
  • Java
阅读更多

     在org.apache.commons.lang.builder包中一共有7个类,用于帮助实现Java对象的一些基础的方法,如compareTo(), equals(), hashCode(), toString()等。他们分别是:
    
    CompareToBuilder – 用于辅助实现Comparable.compareTo(Object)方法;
    EqualsBuilder – 用于辅助实现Object.equals()方法;
    HashCodeBuilder – 用于辅助实现Object.hashCode()方法;
    ReflectionToStringBuilder – 使用反射机制辅助实现Object.toString()方法;
    ToStringBuilder – 用于辅助实现Object.toString()方法;
    StandardToStringStyle – 辅助ToStringBuilder控制标准格式;
    ToStringStyle – 辅助ToStringBuilder控制输出格式。

 

import java.util.Date;

import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.commons.lang.builder.StandardToStringStyle;

public class BuilderTest {

    public static void main(String[] args) {
        Person person1 = new Person("郑致力", 32, new Date());
        Person person2 = new Person("高婕", 27, new Date());

        System.out.println("person1's info: " + person1);
        System.out.println("person2's info: " + person2);
        System.out.println("person1's hash code: " + person1.hashCode());
        System.out.println("person2's hash code: " + person2.hashCode());
        System.out.println("person1 equals person2? " + person1.equals(person2));
        
        System.out.println("--------------More String Style of Object ------------------------------------");
        System.out.println("person1's info: " + person1.toString2(ToStringStyle.MULTI_LINE_STYLE));
        System.out.println("person1's info: " + person1.toString2(ToStringStyle.NO_FIELD_NAMES_STYLE));
        System.out.println("person1's info: " + person1.toString2(ToStringStyle.SHORT_PREFIX_STYLE));
        System.out.println("person1's info: " + person1.toString2(ToStringStyle.SIMPLE_STYLE));
        System.out.println("person1's info: " + person1.toString2(new StandardToStringStyle()));
    }
}

class Person implements Comparable {
    private String name;
    private int age;
    private Date dateJoined;

    public Person() {
    };

    public Person(String name, int age, Date dateJoined) {
        this.name = name;
        this.age = age;
        this.dateJoined = dateJoined;
    }

    public int compareTo(Object o) {
        if (!(o instanceof Person)) {
            return -1;
        }
        Person other = (Person) o;
        return new CompareToBuilder().append(name, other.getName()).append(age,
                other.getAge()).append(dateJoined, other.getDateJoined())
                .toComparison();
    }

    public boolean equals(Object o) {
        if (!(o instanceof Person)) {
            return false;
        }
        Person other = (Person) o;
        return new EqualsBuilder().append(name, other.getName()).append(age,
                other.getAge()).append(dateJoined, other.getDateJoined())
                .isEquals();
    }

    //注:两个equlas为true的对象在这里会被计算成不同的hash码,慎用
    public int hashCode() {
        return new HashCodeBuilder().append(name).append(age)
                .append(dateJoined).toHashCode();
    }

    public String toString() {
        return new ToStringBuilder(this).append("name", name)
                .append("age", age).append("dateJoined", dateJoined).toString();
    }
    
    public String toString2(ToStringStyle style) {
        ToStringStyle _style = ToStringStyle.DEFAULT_STYLE;
        if (null != style) {
            _style = style;
        }
        return new ToStringBuilder(this, _style).append("name", name)
                .append("age", age).append("dateJoined", dateJoined).toString();
    }    

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Date getDateJoined() {
        return dateJoined;
    }

    public void setDateJoined(Date dateJoined) {
        this.dateJoined = dateJoined;
    }

}

 

      这些builder用起来很简单,只要new一个实例,append需要参与的信息,然后加上toComparison、isEquals、toHashCode、toString结尾就可以了。如果不需要使用append指定信息,则可直接使用反射机制进行自动化实现,如下面的Student类:

 

class Student extends Person {
    private int grad;
    
    public Student() {super();}
    
    public Student(String name, int age, Date dateJoined, int grad) {
        super(name, age, dateJoined);
        this.grad = grad;
    }
    
    public int compareTo(Object o) {
        return CompareToBuilder.reflectionCompare(this, o);
    }
    
    public boolean equals(Object o) {
        return EqualsBuilder.reflectionEquals(this, o);
    }
    
    public int hashCode() {
        return HashCodeBuilder.reflectionHashCode(this);
    }
    
    public String toString() {
        return ReflectionToStringBuilder.toString(this);
    }
}

 

       这里需要补充一点,对于ToStringStyle类,代码中已经内置了5种,分别为ToStringStyle.DEFAULT_STYLE、ToStringStyle.MULTI_LINE_STYLE、ToStringStyle.NO_FIELD_NAMES_STYLE、ToStringStyle.SHORT_PREFIX_STYLE、ToStringStyle.SIMPLE_STYLE。不知道为什么,这5种内置类的实现都被定义成了private static final类了。所以如果上述5种类不能满足你的要求的话,想继承他们是不可能的。所以你需要创建StandardToStringStyle一个实例,然后调用它的方法来实现自定义的格式。在StandardToStringStyle的单元测试代码中,是这样调用的:

 

private static final StandardToStringStyle STYLE = new StandardToStringStyle();
    
    static {
        STYLE.setUseShortClassName(true);
        STYLE.setUseIdentityHashCode(false);
        STYLE.setArrayStart("[");
        STYLE.setArraySeparator(", ");
        STYLE.setArrayEnd("]");
        STYLE.setNullText("%NULL%");
        STYLE.setSizeStartText("%SIZE=");
        STYLE.setSizeEndText("%");
        STYLE.setSummaryObjectStartText("%");
        STYLE.setSummaryObjectEndText("%");
    }

 

分享到:
评论

相关推荐

    org.apache.commons.lang jar包下载

    org.apache.commons.lang.builder.ToStringStyle$NoFieldNameToStringStyle.class org.apache.commons.lang.builder.ToStringStyle$ShortPrefixToStringStyle.class org.apache.commons.lang.builder....

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

    org.apache.commons.lang.builder.ToStringStyle$NoFieldNameToStringStyle.class org.apache.commons.lang.builder.ToStringStyle$ShortPrefixToStringStyle.class org.apache.commons.lang.builder....

    org.apache.commons.lang

    import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder;

    org.apache.commons.lang jar包

    org.apache.commons.lang jar包

    org.apache.commons.lang包

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

    org.apache.commons.lang jar下载

    这个`org.apache.commons.lang.jar`文件是该库的一个版本,包含了Lang项目的所有包,使得开发者在处理字符串、日期、数字、反射、比较等方面的工作变得更加便捷高效。以下是关于Apache Commons Lang的一些关键知识点...

    org.apache.commons.lang3.StringUtils.jar.rar

    在给定的标题 "org.apache.commons.lang3.StringUtils.jar.rar" 中,我们可以看到这个压缩包包含的是 `StringUtils.jar`,实际上它是一个 `common-lang3.jar` 文件的别名。这个 JAR 包是 Apache Commons Lang 项目的...

    commons-lang.jar

    org.apache.commons.lang.builder.ToStringStyle$ShortPrefixToStringStyle.class org.apache.commons.lang.builder.ToStringStyle$SimpleToStringStyle.class org.apache.commons.lang.builder.ToStringStyle.class...

    commons-lang3-3.12.0.zip

    java包。 import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder;

    commons-lang3-3.1 API

    org.apache.commons.lang.builder org.apache.commons.lang.enum org.apache.commons.lang.enums org.apache.commons.lang.exception org.apache.commons.lang.math org.apache.commons.lang.mutable org....

    apache commons-lang简介

    2.1.1.3 org.apache.commons.lang.builder 这个包主要是为了提供对象构建和比较的工具,如ToStringBuilder、HashCodeBuilder和EqualsBuilder,它们帮助开发者生成对象的toString、hashCode和equals方法,避免了重复...

    Jakarta Commons笔记

    import org.apache.commons.lang.builder.HashCodeBuilder; public class EqualsHashCodeExample { private int id; private String name; public EqualsHashCodeExample(int id, String name) { this.id = id...

    Commons培训

    2. **org.apache.commons.lang.builder**:该包提供了一系列用于快速生成Java类中常见的方法(如`toString()`、`hashCode()`、`equals()`)的工具类。 3. **org.apache.commons.lang.enum**:这是一个旧的枚举处理包...

    前端-后端java的Util类的工具类

    │ │ │ frame-sourcefiles-org.apache.ibatis.builder.annotation.html │ │ │ frame-sourcefiles-org.apache.ibatis.builder.html │ │ │ frame-sourcefiles-org.apache.ibatis.builder.xml.html │ │ │ ...

    commons-lang3-3.1.jar_2021.07.zip

    《Apache Commons Lang 3.1:Java编程的强大工具》 Apache Commons Lang 是一个Apache软件基金会提供的Java类库,专门用于处理日常编程任务。这个库包含了大量实用的工具类,极大地扩展了Java的标准库,其中的版本...

    common-lang3.jar

    6. **对象工具**:`org.apache.commons.lang3.builder`提供了对象比较、深拷贝等实用工具,如`EqualsBuilder`和`HashCodeBuilder`用于实现自定义的equals()和hashCode()方法。 7. **异常处理**:`org.apache....

    commons-lang3-3.7

    Apache Commons Lang 3.7 包含多个子包,如 `org.apache.commons.lang3`, `org.apache.commons.lang3.builder`, `org.apache.commons.lang3.text` 等,每个子包都专注于特定的功能领域。例如,`builder` 包提供了...

    Hibernate中对数据库复合主键的支持.pdf

    import org.apache.commons.lang.builder.HashCodeBuilder; // ... @Override public boolean equals(Object obj) { if (obj instanceof Person) { Person rhs = (Person) obj; return new EqualsBuilder()....

    Hibernate复合主键

    import org.apache.commons.lang.builder.HashCodeBuilder; public class TUserPK implements Serializable { private String firstname; private String lastname; public String getFirstname() { return ...

Global site tag (gtag.js) - Google Analytics