从类似方法中删除冗余

时间:2015-10-30 09:22:47

标签: java coding-style

我有典型的清洁代码'自然问题。我有两种方法。他们是相似的

public void setValue(String arg1, String arg2){
    Fragment frag1 = foundElem(arg1);
    // ... do something with frag1, do something else

    doSomething(arg2);
}

public void setValue(String arg1){
    Fragment frag1 = foundElem(arg1);
    // ... do something with frag1, do something else

    doSomething();
}

我正在尝试找到解决方案,如何删除冗余并将两个类似的方法转换为重复性较低的方法。

我考虑过删除第二个方法并检查arg2是否为null,但我尽量不使用null作为我的问题的解决方案,尤其是我不认为调用方法setValue(" FirstArgument&# 34;,"")是个好习惯。

public void setValue(String arg1, String arg2){
    Fragment frag1 = foundElem(arg1);
    // ... do something with frag1, do something else

    if(arg2 != null)
        doSomething(arg2);
    else
        doSomething();
}

我还想过' Optional'论点。你怎么看待这件事?我尽量让我的代码尽可能干净,因此重构是我工作结束时的典型任务。

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题。正如您所提到的那样检查null方式,但这里还有其他一些方法。

使用来自另一个(alt 1)的较小参数调用方法:

public void setValue(String arg1) {
    Fragment frag1 = foundElem(arg1);
    // ... do something with frag1, do something else

    doSomething();
}

public void setValue(String arg1, String arg2) {
    setValue(arg1);
    doSomething(arg2);
}

(请注意,这会两次调用doSomething。这可能不适合您。)

使用来自另一个的较小参数调用方法(alt 2):

public void setValue(String arg1) {
    Fragment frag1 = foundElem(arg1);
    // ... do something with frag1, do something else
}

public void setValue(String arg1, String arg2) {
    setValue(arg1);
    doSomething(arg2);
}

(如果doSomething()(没有参数)实际上没有做太多。)

创建从private方法调用的第三个public方法。此方法将包含public个方法共有的代码:

(该方法不能被称为setValue(String),它会与公共方法冲突。组成一个描述它的名称的好名称。)

private void setValuePrivate(String arg1) {
    Fragment frag1 = foundElem(arg1);
    // ... do something with frag1, do something else
}

public void setValue(String arg1) {
    setValuePrivate(arg1);
    doSomething();
}

public void setValue(String arg1, String arg2) {
    setValuePrivate(arg1);
    doSomething(arg2);
}

我可能还有其他方法可以解决这个问题。