java多条件判断应分三层校验:轻量级(非空、格式)、中量级(业务规则)、重量级(db/远程调用);“或”条件用set.contains或switch表达式;按场景选if-else、if-else if-else或switch;注意判空安全、括号优先级和方法封装。

Java 中处理多条件组合判断,核心是让逻辑清晰、执行高效、后续好改。不是堆 if 嵌套,而是分层拦截、按需校验。
按成本与失败率分三层校验
把校验动作拆成轻量、中量、重量三级,从快到慢、从高失败率到低失败率依次执行:
-
轻量级(最先做):非空检查、格式校验。比如用
StringUtils.isBlank()判字符串,用正则或工具类验证手机号、邮箱、身份证;密码长度和字符组合也放这里。开销小、失败多,早拦早省事。 -
中量级(居中做):业务规则、状态一致性判断。例如验证码是否匹配且未过期(
CodeService.verify(phone, code)),订单当前状态是否允许发起支付(!order.isDraft() && order.getStatus() == PAID)。避免在这里查数据库。 -
重量级(最后做):DB 查询、远程调用类校验。比如查手机号是否已注册(
userMapper.selectByPhone(dto.getPhone()) != null)、调第三方风控接口(thirdPartyService.checkCreditLevel(userId))。失败代价大,放后面可减少无效调用。
多个“或”条件别硬写 || 链
像“角色是 admin 或 editor 或 moderator”这种判断,不用 role.equals("admin") || role.equals("editor") || role.equals("moderator"),容易漏、难维护、不防 null:
- 推荐用
Set.of("admin", "editor", "moderator").contains(role)—— 简洁、安全、易扩展。 - Java 14+ 可用 switch 表达式:
switch (role) { case "admin", "editor", "moderator" -> true; default -> false; }
分支结构选对语法,别滥用嵌套
根据场景选合适结构,避免一层套一层:
- 只有两种结果,用
if-else,比如登录验证:"admin".equals(userName) && "0".equals(passWord)成立就成功,否则失败。 - 连续区间判断(如分数定等级),用
if-else if-else,从高到低写,比如score >= 90→ A,score >= 80→ B…… - 等值枚举判断(如订单类型、状态码),优先用
switch,JDK 14+ 支持case "A", "B" ->多值合并,更干净。
注意细节,提升健壮性
几个容易忽略但关键的点:
- 字符串判空统一用
"xxx".equals(str)或Objects.equals(str, "xxx"),避免str.equals("xxx")报 NPE。 - 多个条件组合时,善用括号明确优先级,比如
(a && b) || (c && d)比a && b || c && d更易读、不易错。 - 复杂校验建议封装为独立方法,比如
validateOrderEligibility(order),主流程只留一层调用,保持主干清爽。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











