请问下面if 判断 如何优化?

如何进一步优化下面的if判断,大神帮帮我

private String handlerRepoTradeVariety(BigDecimal days) {
        if (days.compareTo(BigDecimal.valueOf(1d)) == 0) {
            return DataDictionary.PLEDGE_REPO_TRADE_VARIETY_OR001;
        }
        if (days.compareTo(BigDecimal.valueOf(1d)) > 0
                && days.compareTo(BigDecimal.valueOf(7d)) <= 0) {
            return DataDictionary.PLEDGE_REPO_TRADE_VARIETY_OR007;
        }
        if (days.compareTo(BigDecimal.valueOf(7d)) > 0
                && days.compareTo(BigDecimal.valueOf(14d)) <= 0) {
            return DataDictionary.PLEDGE_REPO_TRADE_VARIETY_OR014;
        }
        if (days.compareTo(BigDecimal.valueOf(14d)) > 0
                && days.compareTo(BigDecimal.valueOf(21d)) <= 0) {
            return DataDictionary.PLEDGE_REPO_TRADE_VARIETY_OR021;
        }
        if (days.compareTo(BigDecimal.valueOf(21d)) > 0
                && days.compareTo(BigDecimal.valueOf(30d)) <= 0) {
            return DataDictionary.PLEDGE_REPO_TRADE_VARIETY_OR1M;
        }
        if (days.compareTo(BigDecimal.valueOf(30)) > 0
                && days.compareTo(BigDecimal.valueOf(60)) <= 0) {
            return DataDictionary.PLEDGE_REPO_TRADE_VARIETY_OR2M;
        }
        if (days.compareTo(BigDecimal.valueOf(60)) > 0
                && days.compareTo(BigDecimal.valueOf(90)) <= 0) {
            return DataDictionary.PLEDGE_REPO_TRADE_VARIETY_OR3M;
        }
        return StringUtils.EMPTY;
    }

6个回答

1、if()中的判断代码建议封装到独立的方法中,通过合适的命名,便于阅读;
2、考虑使用设计模式优化,比如简单工厂模式

从 if 的内容来看,是要判断数值范围的,这么来看,没有可优化的空间了。
可适当添加空行,对每个 if 分支加上注释,增加代码的可读性。

使用if..else if或者switch,判断时只判断小于某个数就OK

        if (num == 0) {
            ...
        } else if (num <= 7) {
            ...
        } else if (num <= 14) {
            ...
        } else if (num <= 21) {
            ...
        }

了解一下责任链模式。,,,。。。。

使用 if ,else if ,else 进行判断吧;
原先的方式,是所有的判断都要去执行一次,在不考虑return 返回就截止的情况

以多态封装为荣,以if-else为耻

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问