当前位置: 首页 > 知识库问答 >
问题:

我需要一个更好的方法来减少代码行,因为它有很多if语句,在条件中调用方法

经佐
2023-03-14

这是我的代码,我需要知道有没有办法减少程序中的行数。

因为if语句中涉及到方法调用,所以我不能使用枚举来替换它们。

public class AgreementQueryBuilder {

    @SuppressWarnings("unchecked")
    public static String searchQueryBuilder(FetchAgreementsModel agreementsModel,
            @SuppressWarnings("rawtypes") List obj) {

        StringBuilder selectQuery = new StringBuilder(
                "select *,e.id as agreementid from eglams_agreement e left outer join eglams_rentincrementtype  t on e.rent_increment_method=t.id where");

        // if statement to check the arguments and build the where criteria

        if (agreementsModel.getAgreementId() != null || agreementsModel.getAgreementNumber() != null
                || agreementsModel.getStatus() != null || agreementsModel.getTenantId() != null
                || (agreementsModel.getFromDate() != null && agreementsModel.getToDate() != null)
                || agreementsModel.getTenderNumber() != null || agreementsModel.getTinNumber() != null
                || agreementsModel.getTradeLicense_number() != null)
            return null;

        boolean isAllFieldsNull = true;

        if (agreementsModel.getAgreementId() != null) {
            if (isAllFieldsNull == true) {
                selectQuery.append(" e.id=?");
                isAllFieldsNull = false;
                obj.add(agreementsModel.getAgreementId());
            }
        }

        if (agreementsModel.getAgreementNumber() != null) {
            if (isAllFieldsNull == true) {
                selectQuery.append(" e.agreement_number=?");
                isAllFieldsNull = false;
            } else
                selectQuery.append(" and e.agreement_number=?");
            obj.add(agreementsModel.getAgreementNumber());
        }

        if (agreementsModel.getStatus() != null) {

            if (isAllFieldsNull == true) {
                selectQuery.append(" e.status=?");
                isAllFieldsNull = false;
            } else
                selectQuery.append(" and e.status=?");

            obj.add(agreementsModel.getStatus());
        }

        if (agreementsModel.getTenantId() != null) {
            if (isAllFieldsNull == true) {
                selectQuery.append(" e.tenant_id=?");
                isAllFieldsNull = false;
            } else
                selectQuery.append(" and e.tenant_id=?");

            obj.add(agreementsModel.getTenantId());
        }

        if (agreementsModel.getTenderNumber() != null) {
            if (isAllFieldsNull == true) {
                selectQuery.append(" e.tender_number=?");
                isAllFieldsNull = false;
            } else
                selectQuery.append(" and e.tender_number=?");
            obj.add(agreementsModel.getTenderNumber());
        }
        if (agreementsModel.getTinNumber() != null) {
            if (isAllFieldsNull == true) {
                selectQuery.append(" e.tin_number=?");
                isAllFieldsNull = false;
            } else
                selectQuery.append(" and e.tin_number=?");
            obj.add(agreementsModel.getTinNumber());
        }

        if (agreementsModel.getTradeLicense_number() != null) {
            if (isAllFieldsNull == true) {
                selectQuery.append(" e.TradeLicense_number=?");
                isAllFieldsNull = false;
            } else
                selectQuery.append(" and e.TradeLicense_number=?");
            obj.add(agreementsModel.getTradeLicense_number());
        }

        if (agreementsModel.getFromDate() != null) {
            if (agreementsModel.getToDate() != null) {
                if (isAllFieldsNull == true) {
                    selectQuery.append(" t.FromDate=?");
                    isAllFieldsNull = false;
                } else
                    selectQuery.append(" and t.FromDate=?");

                obj.add(agreementsModel.getFromDate());
                selectQuery.append(" and t.ToDate=?");
                obj.add(agreementsModel.getToDate());
            }
        }
        System.err.println(selectQuery);
        return selectQuery.toString();
    }
}

共有1个答案

屠浩
2023-03-14

查看您的代码:

if (agreementsModel.getAgreementId() != null ||  ... )
    return null;

因此,我们知道,如果getAgreementId()!=null,该方法将返回null,并且不会进一步执行。但在那之后你会写:

if (agreementsModel.getAgreementId() != null) {
        selectQuery.append(" e.id=?");
        isAllFieldsNull = false;
        obj.add(agreementsModel.getAgreementId());
    }
}

我们知道不能输入整个块,因为如果getAgreementId()!=null为true,方法就会返回。

if (agreementsModel.getAgreementId() != null || agreementsModel.getAgreementNumber() != null
            || agreementsModel.getStatus() != null || agreementsModel.getTenantId() != null
            || (agreementsModel.getFromDate() != null && agreementsModel.getToDate() != null)
            || agreementsModel.getTenderNumber() != null || agreementsModel.getTinNumber() != null
            || agreementsModel.getTradeLicense_number() != null)
        return null;
 类似资料:
  • 问题内容: 对于我的工作,我必须开发一个小型Java应用程序,该应用程序可以解析非常大的XML文件(约30万行)以选择非常具体的数据(使用),因此我试图对其进行一些优化。我想知道这两个摘要之间哪个更好: 要么 其他详情: 这些if语句在循环内的每次迭代中执行(约20k次迭代) 的是一种在利用外部函数每次迭代计算 如果将设置为,则无需测试正则表达式是否匹配 谢谢你的帮助。 问题答案: 我遵循的一条黄

  • 我正在开发一个java程序,它接受输入的分数,给出输入的总数和平均值,但是我很难计算出如何获得当前输入的最高分数“我使用了大量嵌套的else-if语句,但必须有一种简单的方法来实现这一点,而不是键入100个else-if语句这是我的代码。我在else-if语句开始的地方添加了一条注释,以确定最高级别

  • 我有下面的代码,有太多的if语句。 有没有其他方法可以让这更干净? 我有太多if语句的代码块。我想做得更干净。有没有其他方法可以做到这一点?

  • 我自己找到了一种从熊猫数据帧中删除nan行的方法。给定一个包含nan值的列为的数据帧,是否有更优雅的方法来删除列中包含nan值的每一行?

  • 问题内容: 一个简单的问题,但是Google并没有提供太多帮助。 我有一个带很多条件的if语句(必须检查10或15个常量以查看是否存在任何常量。) 而不是这样写: 有没有办法格式化它 只是想知道是否有更简单的方法来编写此代码,对您的帮助表示赞赏。 编辑 :答案非常有帮助,但是一些人要求我添加更多细节,所以我会这样做以缓解他们的好奇心。我正在创建一个日期验证类,该类需要确保在只有30天的月份中天数不