以下代码使我的圈复杂度为35。
public void updateGUIInProgress(StatusLabelDTO statusLabelDTO) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
label1.setText(statusLabelDTO.getIterationStr());
label2.setMaximum(statusLabelDTO.getTotalCount());
label3.setSelection(statusLabelDTO.getExeIndex());
label4.setText(statusLabelDTO.getStepStr());
label5.setText(statusLabelDTO.getPassStr());
label6.setText(statusLabelDTO.getFailStr());
}
});
}
我尝试将所有设置行移至某个方法。但是它对我没有用。如何降低复杂度?
答案 0 :(得分:2)
在不知道为您计算圈复杂度的工具的情况下,这确实很难。最后,您的代码执行不了什么。
您可以像这样重构它:
someDisplayYouAcquiredPreviously.asyncExec(new SpecificRunnable());
显然,这样做需要您之前存储该Display对象,并且还需要您使用一个不同的命名类而不是该匿名内部类。
但真正的答案是:研究您的工具。 Wikipedia告诉我们有关cyclomatic complexity的信息:
一段源代码的循环复杂性是其中的线性独立路径的数量。例如,如果源代码不包含控制流语句(条件或决策点),则复杂度将为1,因为通过代码只有一条路径。
您的代码中完全有一个路径,因此该值应为1,而不是35。
换句话说:您的工具似乎计算出错误的数字,可能它不理解Java语法。因此,真正的答案是退后一步,看看正在使用的设置/工具。
是的,我发现用户Hulk最有可能是正确的,您应该将工具升级到较新的版本,因为这可能是“源代码监视器”应用程序中的错误199。
提示:您知道要退一步并检查环境中所有其他工具的版本。保守更新是一回事,但是使用7年以上的版本已不再是“保守”的,这是严重失职的。