greatjone

          BlogJava 聯(lián)系 聚合 管理
            7 Posts :: 24 Stories :: 3 Comments :: 0 Trackbacks

          通過(guò)commons-lang.jar包實(shí)現(xiàn)一個(gè)javabean的equals,hashCode和toString三個(gè)方法,一般情況下,用手工直接實(shí)現(xiàn)這三個(gè)方法比較繁瑣,
          而采用common-lang.jar實(shí)現(xiàn)起來(lái)就比較容易了。下面即是其實(shí)現(xiàn)的具體代碼:

           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這個(gè)構(gòu)造器的兩個(gè)參數(shù)必須為奇數(shù)。
          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}

          我們可以看到依然需要手動(dòng)維護(hù)這么多的屬性,在common-lang.jar包里面還可通過(guò)反射機(jī)制來(lái)實(shí)現(xiàn)這三個(gè)方法,便于代碼的維護(hù),具體實(shí)現(xiàn)如下:

           1@Override
           2    public boolean equals(Object obj) {
           3        return EqualsBuilder.reflectionEquals(this, obj);
           4    }

           5    @Override
           6    public int hashCode() {
           7        return HashCodeBuilder.reflectionHashCode(this);
           8    }

           9    @Override
          10    public String toString() {
          11        return ToStringBuilder.reflectionToString(this);
          12    }
              
          posted on 2010-10-17 10:58 jone 閱讀(1851) 評(píng)論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 汶川县| 栖霞市| 巴楚县| 伊金霍洛旗| 河南省| 灯塔市| 来凤县| 玛沁县| 鄂托克前旗| 梓潼县| 格尔木市| 平阳县| 缙云县| 瓦房店市| 新沂市| 馆陶县| 南投县| 独山县| 五华县| 资溪县| 松原市| 邳州市| 满洲里市| 长子县| 定安县| 长岭县| 榆中县| 南汇区| 汉源县| 沙河市| 永兴县| 潞西市| 安国市| 淄博市| 钟山县| 平乐县| 潮安县| 固始县| 南昌县| 高安市| 建阳市|