gpt4 book ai didi

java - PMD :the method has cyclomatic complexity 10. 有什么替代方案或者可以吗?

转载 作者:行者123 更新时间:2023-12-02 07:41:37 24 4
gpt4 key购买 nike

此方法为表单中的每个文本字段调用不同的验证方法,并且映射中的 int[] 数组决定要在文本字段上执行哪些方法或哪种类型的验证。但此方法的圈复杂度为 10。请建议任何更好的替代方案或可以采取哪些措施来改进此代码?

public final boolean validateFields(final HashMap<JTextField, int[]> textFieldMap) {
boolean flag = false;
for (Map.Entry<JTextField, int[]> entry : textFieldMap.entrySet()) {
JTextField field = entry.getKey();
for (int constant : entry.getValue()) {
switch (constant) {
case Constants.VAL_CHAR : flag = validateChar();
break;
case Constants.VAL_DATE : flag = validateDate();
break;
case Constants.VAL_DUPLICATE : flag = validateDuplicate();
break;
case Constants.VAL_EMAIL : flag = validateEmail();
break;
case Constants.VAL_LENGTH : flag = validateLength();
break;
case Constants.VAL_NUMERIC : flag = validateNumeric();
break;
case Constants.VAL_STRING : flag = validateNumeric();
break;
default : flag = validateNotNull();
break;
}
}
}
return flag;
}

最佳答案

我不知道这是否适用于您的情况,但您可以使用枚举而不是 int 常量:

public enum Constants {

VAL_CHAR {
public boolean validate() {
return validateChar();
}
},
VAL_DATE {
public boolean validate() {
return validateDate();
}
},
...
;

public abstract boolean validate();

}

然后您可以像这样重构代码:

public final boolean validateFields(final HashMap<JTextField, int[]> textFieldMap) {
boolean flag = false;
for (Map.Entry<JTextField, int[]> entry : textFieldMap.entrySet()) {
JTextField field = entry.getKey();
for (int constant : entry.getValue()) {
Constants enumConstant = ...; //mapping from int if you need to keep ints
flag = enumConstant.validate();
}
}
return flag;
}

或者只是去掉整数:

public final boolean validateFields(final HashMap<JTextField, Constants[]> textFieldMap) {
boolean flag = false;
for (Map.Entry<JTextField, Constants[]> entry : textFieldMap.entrySet()) {
JTextField field = entry.getKey();
for (Constants constant : entry.getValue()) {
flag = constant.validate();
}
}
return flag;
}

PS:在当前代码中,您可能指的是flag = flag && validateXXX(),除非您只想返回与最后检查的字段对应的标志。

关于java - PMD :the method has cyclomatic complexity 10. 有什么替代方案或者可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11509287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com