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

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

有沒有好的方法來重構(gòu)使用重復(fù)條件語句的方法?

有沒有好的方法來重構(gòu)使用重復(fù)條件語句的方法?

翻過高山走不出你 2023-12-13 16:55:37
我有兩個(gè)類似的方法,具有重復(fù)的條件和重復(fù)的 else 塊。我想重構(gòu)它以共享相同的邏輯和 else 塊,但調(diào)用不同的方法。我怎樣才能做到這一點(diǎn)?public void entryPoint1(...){    if(nullCheckStuff) {}        method1(stuff);        method2(stuff);    } else {        //log error    }}public void entryPoint2(...){    if(nullCheckStuff) {        method2(stuff);    } else {        //log error    }}
查看完整描述

3 回答

?
大話西游666

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

如果您使用 Java 8 或更高版本,一個(gè)可能的解決方案是使用 lambda。您可以使用通用邏輯定義內(nèi)部函數(shù),該函數(shù)采用 Runnable 作為參數(shù):


private void commonLogic(Runnable action)

{

    if(nullCheckStuff) {

        action.run();

    } else {

        //log error

    }

}

那么你的原始函數(shù)看起來就像:


public void entryPoint1()

{

    commonLogic(() -> { method1(); method2()});

}


public void entryPoint2()

{

   commonLogic(() -> method2());

}

您可能還需要向commonLogic()函數(shù)添加更多參數(shù)以傳遞nullCheckStuff表達(dá)式和錯(cuò)誤處理塊所需的數(shù)據(jù)。


查看完整回答
反對(duì) 回復(fù) 2023-12-13
?
慕哥6287543

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

如果您的方法還沒有太多參數(shù),您可以這樣重構(gòu):


public void commonEntryPoint(..., boolean m1Condition) {

    if(nullCheckStuff) {

        if (m1Condition) {

            method1(stuff);

        }

        method2(stuff);

    } else {

        //log error

    }

}

干杯!


查看完整回答
反對(duì) 回復(fù) 2023-12-13
?
回首憶惘然

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

所以你的代碼是這樣的:


public void entryPoint1(...)

    {

        if(nullCheckStuff) {}

            method1(stuff);

            method2(stuff);

        } else {

            //log error

        }

    }


public void entryPoint2(...)

    {

        if(nullCheckStuff) {

            method2(stuff);

        } else {

            //log error

        }

    }

您必須取出 if 塊并將其放入另一個(gè)函數(shù)中,比方說checkNullStuff():


public bool checkNullStuff(<object, string, whatever> condition, int entrypoint) {

    bool everythingOk = true;

    //checks if null

    if(condition) {

      return !everythingOk;

     }

    //executes common methods

     method1(stuff);

    //if not empty check what to do


    switch(entrypoint) {

      case 1:

         method2(stuff);

        break;

      case 2:

        method3(stuff);

        break;

      default:


        everythingOk = false;

    }

    return everythingOk;

}

為什么我使用 switch 而不是 if,如果你的入口點(diǎn)增長(zhǎng)并且需要執(zhí)行更常見的方法和入口點(diǎn)函數(shù):


public void entryPoint1(...)

{

    // here we check if went wrong, otherwise the functions were executed

    if(!checkNullStuff(nullCheckStuff, 1)) {}

       // code for when nullCheckStuff was not what we exepected

    } 

}


查看完整回答
反對(duì) 回復(fù) 2023-12-13
  • 3 回答
  • 0 關(guān)注
  • 216 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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