我有典型的清洁代码'自然问题。我有两种方法。他们是相似的
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'论点。你怎么看待这件事?我尽量让我的代码尽可能干净,因此重构是我工作结束时的典型任务。
答案 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);
}
我可能还有其他方法可以解决这个问题。