<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Read Sean

    Read me, read Sean.
    posts - 508, comments - 655, trackbacks - 9, articles - 4

    [Jakarta Commons筆記] org.apache.commons.lang.builder

    Posted on 2005-07-30 15:38 laogao 閱讀(6096) 評論(0)  編輯  收藏 所屬分類: On Java

     

    在前面的專題文章中,我們一起過了一遍org.apache.commons.lang包,接下來我們繼續看org.apache.commons.lang.builder這個包。在這里面我們可以找到7個類,用于幫助我們實現Java對象的一些基礎的共有方法。這7個類分別是:

     

    CompareToBuilder – 用于輔助實現Comparable.compareTo(Object)方法;

    EqualsBuilder – 用于輔助實現Object.equals()方法;

    HashCodeBuilder – 用于輔助實現Object.hashCode()方法;

    ToStringBuilder – 用于輔助實現Object.toString()方法;

    ReflectionToStringBuilder – 使用反射機制輔助實現Object.toString()方法;

    ToStringStyle – 輔助ToStringBuilder控制輸出格式;

    StandardToStringStyle – 輔助ToStringBuilder控制標準格式。

     

    我們知道,在實際應用中,其實經常需要在運行過程中判定對象的知否相等、比較、取hash、和獲取對象基本信息(一般是產生log日志)。然而實現這些compareToequalshashCodetoString其實并非那么直截了當,甚至稍有不注意就可能造成難以追蹤的bug,而且這些方法手工維護的話,比較繁瑣,也容易出錯。于是Commons Langbuilder這個包中提供了上述輔助類,為我們簡化這些方法的實現和維護。

     

    來看一個例子:

     

    package sean.study.jakarta.commons.lang;

     

    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.ToStringBuilder;

    import org.apache.commons.lang.builder.ToStringStyle;

     

    public class BuilderUsage {

     

        public static void main(String[] args) {

           

            Staff staff1 = new Staff(123, "John Smith", new Date());

            Staff staff2 = new Staff(456, "Jane Smith", new Date());

           

            System.out.println("staff1's info: " + staff1);

            System.out.println("staff2's info: " + staff2);

            System.out.println("staff1's hash code: " + staff1.hashCode());

            System.out.println("staff2's hash code: " + staff2.hashCode());

            System.out.println("staff1 equals staff2? " + staff1.equals(staff2));

     

        }

     

    }

     

    class Staff implements Comparable {

     

        private long staffId;

        private String staffName;

        private Date dateJoined;

     

        public Staff() {

        }

     

        public Staff(long staffId, String staffName, Date dateJoined) {

            this.staffId = staffId;

            this.staffName = staffName;

            this.dateJoined = dateJoined;

        }

     

        public int compareTo(Object o) {

            int res = -1;

            if (o != null && Staff.class.isAssignableFrom(o.getClass())) {

                Staff s = (Staff) o;

                res = new CompareToBuilder()

                        .append(dateJoined, s.getDateJoined())

                        .append(staffName, s.getStaffName()).toComparison();

            }

            return res;

        }

     

        public boolean equals(Object o) {

            boolean res = false;

            if (o != null && Staff.class.isAssignableFrom(o.getClass())) {

                Staff s = (Staff) o;

                res = new EqualsBuilder()

                        .append(staffId, s.getStaffId())

                        .isEquals();

            }

            return res;

        }

     

        public int hashCode() {

            return new HashCodeBuilder(11, 23).append(staffId).toHashCode();

        }

     

        public String toString() {

            return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)

                    .append("staffId", staffId)

                    .append("staffName", staffName)

                    .append("dateJoined", dateJoined)

                    .toString();

        }

     

        public Date getDateJoined() {

            return dateJoined;

        }

     

        public void setDateJoined(Date dateJoined) {

            this.dateJoined = dateJoined;

        }

     

        public long getStaffId() {

            return staffId;

        }

     

        public void setStaffId(long staffId) {

            this.staffId = staffId;

        }

     

        public String getStaffName() {

            return staffName;

        }

     

        public void setStaffName(String staffName) {

            this.staffName = staffName;

        }

    }

     

    以下是運行結果:

     

    staff1's info: sean.study.jakarta.commons.lang.Staff@190d11[

      staffId=123

      staffName=John Smith

      dateJoined=Sat Jul 30 13:18:45 CST 2005

    ]

    staff2's info: sean.study.jakarta.commons.lang.Staff@1fb8ee3[

      staffId=456

      staffName=Jane Smith

      dateJoined=Sat Jul 30 13:18:45 CST 2005

    ]

    staff1's hash code: 376

    staff2's hash code: 709

    staff1 equals staff2? false

     

    這些builder使用起來都很簡單,new一個實例,append需要參與的信息,最后加上toComparisonisEqualstoHashCodetoString這樣的結尾即可。相應的,如果你不需要這樣級別的控制,也可以使用利用反射機制的版本自動化實現需要的功能,如:

     

        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);

        }

     

    尤其當我們在項目中不希望過多的參與到對這些對象方法的維護時,采用Commons提供的利用反射的這些API就成了方便而相對安全的一個方案。

     

     

    主站蜘蛛池模板: 一个人看的免费视频www在线高清动漫 | 好爽…又高潮了免费毛片| 91在线免费观看| 国产精品国产免费无码专区不卡 | 国产亚洲精品AAAA片APP| 美女视频黄免费亚洲| 亚洲精品美女久久久久| 亚洲人成人网站18禁| 好吊妞在线新免费视频| 国产精品国产亚洲区艳妇糸列短篇 | 亚洲av无码片区一区二区三区 | 大地资源在线资源免费观看| 日本免费人成在线网站| 亚洲国产成人精品无码区在线秒播 | 午夜视频免费成人| 亚洲av无码专区国产不乱码| 日本一道综合久久aⅴ免费| 亚洲乱亚洲乱淫久久| 无码国产精品一区二区免费3p | 免费无码精品黄AV电影| 亚洲精品成人区在线观看| 一个人看的在线免费视频| 久久精品国产亚洲av成人| 国产成人 亚洲欧洲| 99re视频精品全部免费| 91午夜精品亚洲一区二区三区| 波多野结衣中文字幕免费视频| 亚洲人成网7777777国产| 国产精品免费无遮挡无码永久视频 | 亚洲精品无码久久久| 玖玖在线免费视频| 亚洲人成网网址在线看| 免费看片A级毛片免费看| 久久亚洲熟女cc98cm| 人妻视频一区二区三区免费| 美国免费高清一级毛片| 亚洲va在线va天堂va不卡下载| 欧美好看的免费电影在线观看| 无套内射无矿码免费看黄| 久久亚洲精品人成综合网| 国产黄色片在线免费观看|