在软件开发中,参数校验是确保应用程序健壮性和可靠性的关键环节。合理的参数校验不仅可以防止潜在的错误,还能提供清晰的错误信息,便于调试和维护。本文将介绍如何结合使用 Google 的 Guava 库中的 Preconditions
类与 Apache Commons Lang3 的 StringUtils
类进行高效的参数校验。
Guava 是 Google 开发的一个开源 Java 基础库,提供了许多实用的工具类和方法。其中,Preconditions
类专门用于参数校验,确保方法的输入参数满足预期条件。常用的方法包括:
checkNotNull(T reference, String errorMessage)
: 检查引用是否为 null
。checkArgument(boolean expression, String errorMessage)
: 检查布尔表达式是否为 true
。checkState(boolean expression, String errorMessage)
: 检查对象状态是否符合预期。优点:
if
语句。Apache Commons Lang 是 Apache 提供的一个常用的 Java 工具库,StringUtils
类是其中的一个核心组件,提供了丰富的字符串处理方法。常用的方法包括:
isEmpty(String str)
: 检查字符串是否为空 (null
或 ""
)。isBlank(String str)
: 检查字符串是否为空 (null
、""
或仅包含空白字符)。isNotEmpty(String str)
: 检查字符串是否不为空。isNotBlank(String str)
: 检查字符串是否不为空且不全为空白字符。优点:
将 Guava 的 Preconditions
与 Apache Commons Lang3 的 StringUtils
结合使用,可以实现高效且简洁的参数校验。例如:
import com.google.common.base.Preconditions;
import org.apache.commons.lang3.StringUtils;
public class SubjectCategoryService {
public void createCategory(SubjectCategoryDTO subjectCategoryDTO) {
Preconditions.checkNotNull(subjectCategoryDTO.getCategoryType(), "分类类型不能为空");
Preconditions.checkArgument(!StringUtils.isBlank(subjectCategoryDTO.getCategoryName()), "分类的名称不能为空");
Preconditions.checkNotNull(subjectCategoryDTO.getParentId(), "分类的父级id不能为空");
// 业务逻辑处理
}
}
在上述代码中,Preconditions
用于检查对象是否为 null
或布尔表达式是否为 true
,而 StringUtils.isBlank
用于判断字符串是否为空或仅包含空白字符。这种组合使用方式使得参数校验简洁明了,代码可读性和维护性显著提高。
让我们详细解析上述代码示例中的各个部分。
Preconditions.checkNotNull(subjectCategoryDTO.getCategoryType(), "分类类型不能为空");
categoryType
不为 null
。checkNotNull
,如果 categoryType
为 null
,则抛出 NullPointerException
,并附带错误信息 "分类类型不能为空"。null
导致的潜在 NullPointerException
。Preconditions.checkArgument(!StringUtils.isBlank(subjectCategoryDTO.getCategoryName()), "分类的名称不能为空");
categoryName
不为空,且不全为空白字符。方法:
StringUtils.isBlank(subjectCategoryDTO.getCategoryName())
:判断 categoryName
是否为 null
、""
或仅包含空白字符。checkArgument
:如果表达式 !StringUtils.isBlank(...)
为 false
,则抛出 IllegalArgumentException
,并附带错误信息 "分类的名称不能为空"。Preconditions.checkNotNull(subjectCategoryDTO.getParentId(), "分类的父级id不能为空");
parentId
不为 null
。checkNotNull
。在实际开发中,结合使用 Preconditions
和 StringUtils
进行参数校验时,以下最佳实践值得遵循:
提供清晰、简洁且具描述性的错误信息,便于快速定位问题。例如:
Preconditions.checkNotNull(user.getEmail(), "用户邮箱不能为空");
仅在必要的地方进行参数校验,避免冗余的检查。例如,如果某个参数在调用前已经被校验,可以考虑不再重复校验。
根据具体需求选择合适的 Preconditions
方法:
checkNotNull
检查引用是否为 null
。checkArgument
检查方法参数是否符合预期条件。checkState
检查对象的内部状态。
—— 评论区 ——