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

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

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

    最愛Java

    書山有路勤為徑,學海無涯苦作舟

    org.apache.commons.lang.builder學習筆記

        在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控制輸出格式。
        
        我們來看下面的例子來學習這些類的使用:
    package org.apache.commons.lang.builder;

    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("鄭致力"32new Date());
            Person person2 
    = new Person("高婕"27new 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();
        }


        
    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(
    "%");
        }

    posted on 2009-01-04 17:34 Brian 閱讀(1778) 評論(0)  編輯  收藏 所屬分類: Jakarta Commons筆記

    公告


    導航

    <2009年1月>
    28293031123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統計

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    收藏夾

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一区二区免费国产在线观看| a级毛片无码免费真人久久| 中文字幕不卡免费高清视频| 中文字幕在线免费| 国产成人精品免费直播| 亚洲精品蜜桃久久久久久| 亚洲最大福利视频| 日批视频网址免费观看| 欧洲精品成人免费视频在线观看 | 99在线观看免费视频| 国产精品公开免费视频| 亚洲AV人人澡人人爽人人夜夜| 亚洲国产精品自在自线观看| 日批视频网址免费观看| 男女交性永久免费视频播放| 久久精品亚洲综合一品| 美女一级毛片免费观看 | 7x7x7x免费在线观看| 亚洲国产成人久久一区WWW| 亚洲电影唐人社一区二区| 九九综合VA免费看| 免费看成人AA片无码视频羞羞网| 在线亚洲人成电影网站色www| 亚洲午夜一区二区三区| 免费国产成人α片| 亚洲av无码乱码在线观看野外 | 中文无码亚洲精品字幕| 免费成人在线视频观看| 免费a级毛片在线观看| 亚洲丝袜中文字幕| 男人都懂www深夜免费网站| 免费国产一级特黄久久| 国产成人精品日本亚洲直接| 免费一级不卡毛片| 亚洲国产精品一区二区第四页| 国产 亚洲 中文在线 字幕| 999久久久免费精品播放| 亚洲熟妇无码AV在线播放| 色多多免费视频观看区一区| 成人午夜性A级毛片免费| 亚洲综合激情另类小说区|