我还有很多没有包含的 else-if 条件。我如何重构它以降低圈复杂度?
if (ONE.equalsIgnoreCase(eachTag.getNodeName()))
{
myclassDto.setOne(formatter
.getElementValueAfterNullCheckWithTrim((Element) eachTag));
}
else if (TWO.equalsIgnoreCase(eachTag.getNodeName()))
{
myclassDto.setTwo(formatter
.getElementValueAfterNullCheckWithTrim((Element) eachTag));
}
else if (THREE.equalsIgnoreCase(eachTag.getNodeName()))
{
myclassDto.setThree(formatter
.getElementValueAfterNullCheckWithTrim((Element) eachTag));
}
else if (FOUR.equalsIgnoreCase(eachTag.getNodeName()))
{
myclassDto.setFour(formatter
.getElementValueAfterNullCheckWithTrim((Element) eachTag));
}
else if (FIVE.equalsIgnoreCase(eachTag.getNodeName()))
{
myclassDto.setFive(formatter
.getElementValueAfterNullCheckWithTrim((Element) eachTag));
}
else if (SIX.equalsIgnoreCase(eachTag.getNodeName()))
{
myclassDto.setSix(formatter
.getElementValueAfterNullCheckWithTrim((Element) eachTag));
}
如何在 java 中降低此函数的圈复杂度?
最佳答案
你的代码会更容易阅读,同时它也同样“复杂”(虽然实际上并没有那么复杂),如果你:
- 使用 switch 语句
- 预先提取 getNodeName() 的值
预先提取getElementValueAfterNullCheckWithTrim()返回的值
String value = formatter.getElementValueAfterNullCheckWithTrim((Element) eachTag); String nodeName = eachTag.getNodeName(); switch (nodeName) { case ONE: myclassDto.setOne(value); break; case TWO: myclassDto.setTwo(value); break; ... }
编辑: 您可能想要重构 DTO 以使其更易于使用,例如
myclassDto.setValue(nodeName, value)
关于java - 降低圈复杂度,多个if语句java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47905958/