
java 8+ 虽无内置“断言为真否则抛异常”的专用布尔校验工具方法,但可通过 `objects.requirenonnull()` 变通使用,或借助第三方库(如 guava、apache commons)及自定义静态工具方法实现语义清晰、一行式校验。
在 Java 开发中,常需对布尔表达式做“为真则继续,否则抛出特定异常”的逻辑判断(例如参数校验、业务前置检查)。遗憾的是,标准 JDK 并未提供类似 checkTrue(boolean condition, Supplier
不过,有几种专业、简洁且符合 Java 习惯的实现方式:
✅ 推荐方案:自定义静态工具方法(推荐用于项目统一规范)
public class Preconditions {
public static void checkTrue(boolean condition, Supplier extends RuntimeException> exceptionSupplier) {
if (!condition) throw exceptionSupplier.get();
}
// 使用示例
public void processRequest(Request req) {
checkTrue(req.isValid(), () -> new ValidationException("Invalid request"));
// 继续业务逻辑...
}
}该方法语义明确、零依赖、支持延迟异常构造(避免无谓对象创建),且可轻松集成至团队基础工具包。
✅ 替代方案:巧用 Objects.requireNonNull()(JDK 原生,无需额外依赖)
虽然 Objects.requireNonNull() 专为引用类型设计,但可通过包装布尔值实现“伪布尔断言”:
立即学习“Java免费学习笔记(深入)”;
// 利用 Boolean.TRUE 作为“合法哨兵”,将 boolean 转为 Boolean 引用
Objects.requireNonNull(
myFalseReturningMethod ? Boolean.TRUE : null,
() -> "Check request" // 注意:此处 String 会被自动包装为 NullPointerException 消息,不满足自定义异常类型需求
);⚠️ 局限:仅能抛出 NullPointerException,无法指定 ValidationException 等业务异常,不推荐用于需要精确异常类型的场景。
✅ 第三方库方案(适合已引入生态的项目)
-
Guava:
com.google.common.base.Preconditions.checkArgument(myFalseReturningMethod, "Check request"); // 若需自定义异常类型,可配合 throw: if (!myFalseReturningMethod) throw new ValidationException("Check request"); -
Apache Commons Lang:
org.apache.commons.lang3.Validate.isTrue(myFalseReturningMethod, "Check request");
⚠️ 注意事项
- 避免过度追求“一行化”而牺牲可读性。原始 if (!condition) throw ... 语句清晰、高效、零学习成本,在简单场景下反而是最优解。
- 所有 Supplier 形式的异常构造均支持延迟执行,确保异常仅在条件失败时实例化,提升性能。
- 在 Lambda 或 Stream 处理中,优先使用显式 if 判断,而非强行嵌入工具方法,以保持函数式代码的纯粹性与调试友好性。
总结:JDK 未提供原生布尔断言工具,但通过自定义 checkTrue() 方法可优雅补全这一能力;对于新项目,建议封装轻量工具类;对于存量项目,优先评估 if 语句的可维护性——简洁不等于隐晦,明确意图才是健壮代码的第一准则。










