java - 如何在 if 条件下重构一个复杂的表达式?

标签 java if-statement enums refactoring polymorphism

例子如下:

if (folderInfoRecord.getValueRequired()
    && ((!folderInfoData.getInfoType().equals(InfoType.NUMERIC) 
    && !folderInfoData.getInfoType().equals(InfoType.DATE) 
    && !folderInfoData.getInfoType().equals(InfoType.CHOOSE) 
    && StringUtils.isBlank(folderInfoRecord.getInfoValue(), true))
    || (folderInfoData.getInfoType().equals(InfoType.NUMERIC) 
    && folderInfoRecord.getInfoValueNumeric() == null) 
    || (folderInfoData.getInfoType().equals(InfoType.DATE) 
    && folderInfoRecord.getInfoValueDateTime() == null) 
    || (folderInfoData.getInfoType().equals(InfoType.CHOOSE) 
    && folderInfoData.getSelectedInfoRole() == null))) {
        showNotification(pageResourceBundle.getText("JS_ALERT_FIELD_REQUIRED"));
        return;
}

谁能告诉我如何优化这个 if 条件?

最佳答案

关于优化,如果您指的是运行时复杂性,那么我无话可说,因为我对每种方法的作用一无所知。 我强烈建议不要像您展示的那样使用意大利面条代码。对于令人困惑的 NOT 和 OR,我会避免在 if 语句中计算 .equals 或 .isBlank。在外面有一些外部 boolean 标志,比如

bool folderDataisNumeric = folderInfoData.getInfoType().equals(InfoType.NUMERIC) 

然后简单地使用标志 !folderDataisNumeric 将使代码更易于阅读。

无论如何,我的两分钱。

关于java - 如何在 if 条件下重构一个复杂的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21274858/

相关文章:

extjs - 如何在 Extjs4.1 模型中进行枚举?

java - JPEG 格式的原始数据 - JAVA

java - 包装器类型真的是引用类型吗

enums - 如何传递枚举变体以作为函数参数进行匹配?

java - 一个类中的方法与另一类中的方法交互时出现问题

javascript - if 语句不正确

c# - .NET - 将多个字符串值映射到 XmlEnumAttribute

java - 如何在 C 编程中打印结构,类似于 c 中 Java 的 toString() 方法?

java - 如何使用java在链表中插入节点?

regex - 来自 IF 语句正则表达式匹配的值 (Perl)