使用commons-lang.jar包以及反射机制实现javabean的equals,hashCode和toString三个方法重写

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Thinkingcao/article/details/55195805

      在实际项目中,有时需要对javabean的equals,hashCode和toString三个方法重写,一般情况下会选择手写,这样比较繁琐,另外一种方式是通过反射机制就可以完成,这样就显得更为简单。

1.手写

借用其他博客中手写代码案例

 

  1package per.jone;
 2import java.util.Date;
 3import org.apache.commons.lang.builder.EqualsBuilder;
 4import org.apache.commons.lang.builder.HashCodeBuilder;
 5import org.apache.commons.lang.builder.ToStringBuilder;
 6public class MyBean {
 7    private Date date;
 8    private String str;
 9    private int age;
10    
11    public MyBean(Date date, String str, int age) {
12        super();
13        this.date = date;
14        this.str = str;
15        this.age = age;
16    }
17    public Date getDate() {
18        return date;
19    }
20    public void setDate(Date date) {
21        this.date = date;
22    }
23    public String getStr() {
24        return str;
25    }
26    public void setStr(String str) {
27        this.str = str;
28    }
29    public int getAge() {
30        return age;
31    }
32    public void setAge(int age) {
33        this.age = age;
34    }
35    
36    @Override
37    public boolean equals(Object obj) {
38        if(obj==null){
39            return false;
40        }
41        if(obj==this){
42            return true;
43        }
44        if(obj.getClass()!=this.getClass()){
45            return false;
46        }
47        MyBean mb = (MyBean)obj;
48        return new EqualsBuilder().append(this.date, mb.getDate()).append(this.str, mb.getStr())
49               .append(this.age, mb.getAge()).isEquals();
50    }
51    
52    @Override
53    public int hashCode() { 
54        return new HashCodeBuilder(17,37).append(this.date).append(this.str).append(this.age).toHashCode();
55        //注意:HashCodeBuilder这个构造器的两个参数必须为奇数。
56    }
57    
58    @Override
59    public String toString() {
60        return new ToStringBuilder(this).append("date",this.date).append("str",this.str).append("age",this.age).toString();
61    }
62}

    上面就是手写,我们可以看出手写还是比较繁琐,要写这么多属性,下面在common-lang.jar包里面还可通过反射机制来实现这三个方法,便于代码的维护,具体实现如下:

      

package com.shpte.common.param.codec.vo;

import java.io.Serializable;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
/*  实现serializable接口的作用是就是可以把对象存到字节流,进行网络传输,
      在分布式中,要想进行网络传输就得转化为字节流,就得实现序列化,否则在分布式应用中无法进行网络传输*/
public class MultiLineToString implements  Serializable
{ 
	//重写了父类的toString()
	public String toString()
	{
		return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
	}
	
	  //重写了 hashCode 方法  
    public int hashCode()  
    {  
    	return HashCodeBuilder.reflectionHashCode(this);
    }  
    
//    重写了  equals 方法  
    public boolean equals(Object obj)  
    {   
        return EqualsBuilder.reflectionEquals( this , obj);
    } 
}





展开阅读全文

没有更多推荐了,返回首页