apache commons lang 的变量操作聚焦于对象字段、方法返回值等运行时变量的安全处理,涵盖 stringutils(字符串空值防护)、objectutils(对象通用操作)、arrayutils(数组安全操作)及 tostringbuilder/equalsbuilder(对象语义化表达与比较)。

Apache Commons Lang 的变量操作不是指“动态修改变量名”或“反射式赋值”,而是围绕 对象安全访问、空值防护、属性判等、类型转换与构建表达 等高频场景展开的实用能力。它不操作 Java 语言层面的局部变量,但极大简化了对对象字段、方法返回值、集合元素等“运行时变量”的处理逻辑——这才是工程中真正频繁面对的“变量”。
StringUtils:字符串型变量的安全守门员
字符串是最常见的变量类型,也是空指针和逻辑误判的重灾区。Lang3 的 StringUtils 默认 null-safe,让变量判断一步到位:
-
isBlank() / isNotBlank():统一处理
null、空串""、纯空白("\t\n ")——比手写str != null && !str.trim().isEmpty()清晰十倍; -
defaultString(str, "N/A"):把可能为
null的变量转成默认值,避免后续链式调用崩溃; -
trimToEmpty(str):无论输入是
null还是" ",都稳稳输出"",后续可直接.length()或.isEmpty(); -
substringBetween(str, "{", "}"):从一段含标记的文本变量中安全提取中间内容,找不到时返回
null而非抛异常。
ObjectUtils:任意对象变量的通用操作中枢
当变量类型不确定、可能为 null,或需跨类型比较时,ObjectUtils 提供零风险方案:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
firstNonNull(a, b, c):按顺序返回第一个非
null的变量值,常用于 fallback 配置(如ObjectUtils.firstNonNull(user.getPhone(), config.getDefaultPhone(), "000-0000")); -
toString(obj, "–"):安全转字符串,
null自动变成指定默认值,不触发NullPointerException; -
compare(a, b, true):支持
null安全的 Comparable 比较,第三个参数决定null排在前面还是后面; -
clone(obj):对实现了
Cloneable的对象做浅拷贝,适合临时变量隔离使用(注意深拷贝需自行实现)。
ArrayUtils:数组变量的轻量级管家
数组作为基础容器,其长度、元素存在性、合并与查找常被手动写错。ArrayUtils 把这些变量操作封装为原子动作:
-
isEmpty(arr):同时兼容
null和空数组new String[0],返回true; -
contains(arr, value):安全判断某值是否在数组中,
null数组直接返回false,不抛NullPointerException; - add(arr, element):返回新数组(原数组不变),适合函数式风格中对入参变量做“不可变增强”;
-
toMap(keys, values):将两个等长数组一键转为
Map<k></k>,避免手写 for 循环出界或类型转换错误。
ToStringBuilder & EqualsBuilder:对象变量的语义化表达与判定
当需要把一个对象变量转成日志字符串,或判断两个变量是否“业务上相等”时,手工写 toString() 和 equals() 容易漏字段、忽略 null、违反对称性。Lang3 提供声明式解法:
-
ToStringBuilder.reflectionToString(this):一行代码生成含所有非静态字段的调试字符串,自动跳过
null字段并标注类型; -
EqualsBuilder.reflectionEquals(a, b):基于字段值逐个比对,
null字段之间视为相等,无需手动判空; - 配合
HashCodeBuilder可同步生成合规hashCode(),确保变量参与HashMap等集合操作时行为一致。










