最近,我为项目需求写了一小段代码,代码工作正常。

下面的代码是通用版本。

if (someConditionX)
    {
        if (Utils.nullOrEmpty(string1))
        {
            Config config = getConfig();

            if (config != null)
            {
                doA();
            }
        }
        else
        {
            doB();
        }

        if (Utils.nullOrEmpty(string2))
        {
            Config config = getConfig();

            if (config != null)
            {
                doC();
            }
        }
        else
        {
            doD();
        }
    }
    else if (someConditionY)
    {
        if (Utils.nullOrEmpty(string1))
        {
            Config config = getConfig();

            if (config != null)
            {
                doE();
            }
        }
        else
        {
            doF();
        }

        if (Utils.nullOrEmpty(string2))
        {
            Config config = getConfig();

            if (config != null)
            {
                doG();
            }
        }
        else
        {
            doH();
        }
    }


我不相信它的编写方式,而且我认为还有改进的余地,以使其变得更好........

请给我一些建议,以使其更好。...是否可以使用lambdas ?? .........

最佳答案

您可以创建类似以下的界面:

interface Do {
    void doSometing();
}


实现它:

class DoA implements Do {
    void doSometing() {/* do A  */}
}

class DoB implements Do {
    void doSometing() {/* do B  */}
}


DoC ....... DoD ......等)

并通过以下方式使用它:

if (someConditionX)   {
     process(string1, new DoA(), new DoB());
     process(string2, new DoC(), new DoD());
 }


流程定义如下:

void process(String string, Do doA, Do doB) {

    if(nullOrEmpty(string)){
        if (getConfig() != null) {doA.doSometing(); }
    }else {
        doB.doSometing();
    }
}


至于使用Lambda表达式,您可以使用Lambda实现接口:
process (string1, ()->{/* implement doSomething */;}, new DoB());

关于java - 计算流程相同,但功能不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44714467/

10-13 05:00