1

下面的代码给了我 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());
        }
    });
}

我尝试将所有设置行移至一个方法。但是它对我不起作用。如何降低复杂性?

4

1 回答 1

2

在不知道为您计算圈复杂度的工具的情况下,这真的很难。最后,您的代码并没有做太多事情。

可以像这样重构它:

someDisplayYouAcquiredPreviously.asyncExec(new SpecificRunnable());

显然,这样做需要您之前存储该 Display 对象,并且还需要您使用不同的命名类而不是匿名内部类。

但真正的答案是:查看您的工具。维基百科告诉我们圈复杂度

一段源代码的圈复杂度是其中线性独立路径的数量。例如,如果源代码不包含控制流语句(条件或决策点),则复杂度将为 1,因为代码中只有一条路径。

您的代码只有一条路径,因此该值应该是 1,而不是 35。

换句话说:您的工具似乎计算错误的数字,可能它不理解 java 语法。因此,真正的答案是退后一步,看看您正在使用的设置/工具。

是的,我发现用户 Hulk 最有可能是正确的,您应该将您的工具升级到较新的版本,因为这可能是“源代码监视器”应用程序中的错误199 。

并提示:您知道想要退后一步并检查您环境中所有其他工具的版本。对更新保守是一回事,但使用 7 年的旧版本不再“保守”,这是严重的疏忽。

于 2019-01-22T08:23:55.750 回答