第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

創(chuàng)建采用布爾值 isX 并根據(jù)該值需要 isY 的布爾值的構(gòu)造函數(shù)的最佳實(shí)踐是什么?

創(chuàng)建采用布爾值 isX 并根據(jù)該值需要 isY 的布爾值的構(gòu)造函數(shù)的最佳實(shí)踐是什么?

夢里花落0921 2022-12-21 10:15:12
在這個(gè)假設(shè)的問題中,我正在創(chuàng)建一個(gè)類來表示香腸,它可以是:A. 新鮮和包裝 B. 新鮮但未包裝 C. 不新鮮且未包裝注意:它不能是不新鮮和包裝好的??紤]到這一點(diǎn),我正在尋找創(chuàng)建構(gòu)造函數(shù)的最佳實(shí)踐。我嘗試的方法如下,但我認(rèn)為應(yīng)該有更好的解決方案。public class Sausage {    Meat meat;    boolean isFresh;    boolean isPackaged;    public Sausage(Meat meat, Boolean isFresh, Boolean isPackaged) {        this.meat = meat;        if (!isFresh) {            this.isFresh = false;            this.isPackaged = false;        }        else if (isPackaged) {            this.isFresh = true;            this.isPackaged = true;        }        else {            this.isFresh = true;            this.isPackaged = false;        }    }}我正在尋找一種更簡潔的方式來提供此功能。
查看完整描述

3 回答

?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊

您可以將可能的狀態(tài)表示為枚舉類型:


enum SausageType {

    FreshPackaged,

    FreshUnpackaged,

    NotFresh;

}

然后更改您的構(gòu)造函數(shù)以使用 aSausageType而不是 two Booleans。


這種方法的優(yōu)點(diǎn)是不可能用錯誤的狀態(tài)組合調(diào)用構(gòu)造函數(shù),對于你的類的用戶來說很明顯可能的值是什么,你不需要記住保持參數(shù)的脆弱的運(yùn)行時(shí)檢查與不斷變化的要求保持同步。


查看完整回答
反對 回復(fù) 2022-12-21
?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊

您當(dāng)前的方法幾乎沒有問題:

  1. 有一種方法可以創(chuàng)建new沒有意義的寫入對象,例如new Sausage(..., false, true)packaged 將被靜默轉(zhuǎn)換為false. 這很混亂,使代碼更難理解。

  2. 您正在混合Boolean對象類型和boolean原始類型,這將導(dǎo)致不必要的自動裝箱。如果您不需要支持null使用boolean.

  3. boolean字段可能不需要is前綴。

由于有兩個(gè)布爾標(biāo)志和 4 種可能性,它們可以被設(shè)置(true truetrue falsefalse truefalse false)但只有 3 個(gè)有效選項(xiàng)可能命名為工廠方法會更合適:

public class Sausage {


    public static Sasuage newFreshPackaged(Meat meat) {

      return new Sasuage(meat, true, true);

    }


    public static Sasuage newFreshNotPackaged(Meat meat) {

      return new Sasuage(meat, true, false);

    }


    public static Sasuage newNotFreshNotPackaged(Meat meat) {

      return new Sasuage(meat, false, false);

    }


    private Sausage(Meat meat, boolean fresh, boolean packaged) {

        this.meat = meat;

        this.fresh = fresh;

        this.packaged = packaged;

    }

}


查看完整回答
反對 回復(fù) 2022-12-21
?
精慕HU

TA貢獻(xiàn)1845條經(jīng)驗(yàn) 獲得超8個(gè)贊

悄悄改成isPackaged可能false是調(diào)用代碼的驚喜。在這里,如果選擇了組合(非新鮮、包裝),您可以選擇拋出異常。


if (!isFresh && isPackaged) {

    throw new IllegalArgumentException("Can't be both not fresh and packaged!");

}

this.isFresh = isFresh;

this.isPackaged = isPackaged;

您還可以決定使用private強(qiáng)制執(zhí)行您的要求的工廠方法(制作您的構(gòu)造函數(shù))。這將避免需要拋出異常。


public static Sausage createFreshSausage(Meat meat, boolean isPackaged) {

    return new Sausage(meat, true, isPackaged);

}


public static Sausage createNotFreshSausage(Meat meat) {

    return new Sausage(meat, false, false);

}

順便說一句,通常原語boolean將用于構(gòu)造函數(shù)的參數(shù)類型,而不是 object wrapper Boolean,就像您的實(shí)例變量一樣。null此處允許的值沒有Boolean任何意義。


查看完整回答
反對 回復(fù) 2022-12-21
  • 3 回答
  • 0 關(guān)注
  • 137 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號