国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

構造器還是構建器?

muzhuyu / 1617人閱讀

摘要:更多關于的文章請戳這里您的留言意見是對我最大的支持我的文章列表

在實例化一個類的過程中,通常會遇到多個參數的構造函數,但如果有些參數是非必需的呢?每次都要初始化那么多參數么?

public class Person {
    private int id;//身份證號
    private String name;//姓名
    private int age;//年齡
    private boolean sex;//性別
    private String desc;//個人描述
    public Person(int id, String name, int age, boolean sex, String desc) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.desc = desc;
    }
}

或者像下面這樣,創建一個必選參數的構造器,在創建幾個可選參數的構造器?

    public Person(int id, String name) {//兩個參數的
        this.id = id;
        this.name = name;
    }

    public Person(int id, String name, int age) {//三個參數的
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Person(int id, String name, int age, boolean sex) {//四個參數的
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

或setter方法?

JavaBean模式自身有嚴重的缺點,因為構造過程被分到幾個調用中,在構造過程中Javabean可能處于不一致的狀態,類無法僅僅通過檢驗構造器參數的有效性來保證一致性。JavaBean模式阻止了把類做成不可變的可能,這就需要程序員付出額外的努力確保線程安全 ---摘自Effective Java

那么我們該怎樣用構建器來實現類的實例化而又不受制于構造函數限制呢?

public class Person {
    private final int id;//身份證號
    private final String name;//姓名
    private int age;//年齡
    private boolean sex;//性別
    private String desc;//個人描述
    private Person(Builder builder){
        this.id=builder.id;
        this.name=builder.name;
        this.age=builder.age;
        this.sex=builder.sex;
        this.desc=builder.desc;
    }
    public static class Builder{
        private final int id;
        private final String name;
        private int age;
        private boolean sex;
        private String desc;
        public Builder(int id, String name) {
            this.id = id;
            this.name = name;
        }
        public Builder age(int age){
            //年齡合法性檢查
            if(age<0)throw new IllegalArgumentException();
            else this.age=age;
            return this;
        }
        public Builder sex(boolean sex){
            this.sex=sex;
            return this;
        }
        public Builder desc(String desc){
            this.desc=desc;
            return this;
        }
        public Person build(){
            return new Person(this);
        }
    }

    @Override
    public String toString() {
        return "id:"+this.id+" 姓名:"+this.name+" 年齡:"+this.age+" 性別:"+this.sex+" 描述:"+this.desc;
    }
}

我們在main函數中測試一下

    public static void main(String[] args) {
        Builder builder=new Person.Builder(123,"張三");
        Person person=builder.age(18).sex(false).desc("好好學習,天天向上").build();
        System.out.println(person.toString());
    }

用構建器創建的實例易于閱讀和編寫,較javaBean模式又更加安全,自然,自然,每種方法都會有其優點和弊端,選擇合適的使用場景,會讓代碼更加健壯易讀。

更多關于java的文章請戳這里:(您的留言意見是對我最大的支持)

我的文章列表

Email:sxh13208803520@gmail.com

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66957.html

相關文章

  • 第2項:當面臨多個參數的構造時考慮使用構建

    摘要:因此,最好一開始就考慮使用構造器。與使用傳統的重疊構造器模式相比,使用模式的客戶端代碼更易于閱讀和編寫,構建器也比更加安全。 ??靜態工廠和構造器有個共同的局限性:他們都不能很好地擴展到大量的可選參數。考慮用一個類表示包裝食品外面顯示的營養成分標簽。這些標簽中有幾個域是必需的:每份的含量、每罐的含量以及每份的卡路里,還有超過20個可選域:總脂肪、飽和脂肪量、轉化脂肪、膽固醇、鈉等等。大...

    KavenFan 評論0 收藏0
  • 第6章:可維護性軟件構建方法 6.3可維護性構建技術

    摘要:遵循特定規則,利用操作符,終止節點和其他非終止節點,構造新的字符串非終結符是表示字符串的樹的內部節點。語法中的生產具有這種形式非終結符終結,非終結符和運算符的表達式語法的非終結點之一被指定為根。 大綱 基于狀態的構建 基于自動機的編程 設計模式:Memento提供了將對象恢復到之前狀態的功能(撤消)。 設計模式:狀態允許對象在其內部狀態改變時改變其行為。 表驅動結構* 基于語法的構...

    young.li 評論0 收藏0
  • Java? 教程(StringBuilder類)

    StringBuilder類 StringBuilder對象與String對象類似,只是它可以被修改,在內部,這些對象被視為包含一系列字符的可變長度數組,在任何時候,可以通過方法調用來改變序列的長度和內容。 除非字符串構建器在更簡單的代碼(參見本節末尾的示例程序)或更好的性能方面提供優勢,否則應始終使用字符串,例如,如果需要連接大量字符串,則附加到StringBuilder對象會更有效。 長度和容...

    daryl 評論0 收藏0
  • C++list類模擬實現

    摘要:類模擬實現類的基本結構結點類成員變量成員函數迭代器類成員函數解引用運算符重載箭頭運算符重載迭代器前置迭代器后置迭代器的比較鏈表類成員變量成員函數構造函數拷貝構造賦值重載析構函數其他小型接口類的基本結構中是一個雙向帶頭循環鏈表。 ...

    894974231 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<