您的位置:首页 >Java构造函数初始化与条件验证技巧
发布于2026-02-17 阅读(0)
扫一扫,手机访问

在Java构造函数中,应先对传入参数进行空值和有效性校验,再赋值给实例变量;若提前赋值再校验,会导致逻辑错误(如校验未初始化的`this.healthProvider`),且违背防御性编程原则。
在设计不可变或强约束的对象时,构造函数是确保对象状态合法的第一道防线。一个常见误区是:将实例变量的初始化语句写在参数校验之前,例如:
public Provider(String healthProvider) {
this.healthProvider = healthProvider; // ❌ 错误:过早赋值
this.patients = new ArrayList<>();
if (this.healthProvider == null) { // ⚠️ 此时校验的是刚赋的值,但逻辑上应校验入参!
throw new IllegalArgumentException(PROVIDER_NULL);
}
if (this.healthProvider.isBlank()) {
throw new IllegalArgumentException(PROVIDER_ISBLANK);
}
}该写法虽能通过部分测试(因healthProvider已赋值),但存在严重问题:
✅ 正确做法是:先校验入参,再赋值,最后初始化依赖资源。标准模式如下:
public Provider(String healthProvider) {
// Step 1: 校验传入参数(使用形参 healthProvider,而非 this.healthProvider)
if (healthProvider == null) {
throw new IllegalArgumentException(PROVIDER_NULL);
}
if (healthProvider.isBlank()) {
throw new IllegalArgumentException(PROVIDER_ISBLANK);
}
// Step 2: 安全赋值
this.healthProvider = healthProvider;
// Step 3: 初始化内部状态(如集合、辅助对象等)
this.patients = new ArrayList<>();
}这种顺序具备三大优势:
⚠️ 额外提醒:
遵循“校验 → 赋值 → 初始化”这一黄金顺序,是编写健壮、可维护Java构造函数的关键实践。
下一篇:悟空浏览器网页版登录器更新
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9