common3依赖包,提供工具类详解

好的!我们来全面、系统、简洁地认识 Apache Commons Lang3org.apache.commons.lang3)工具包,目标是:

  • 知道它整体提供了什么能力
  • 每个大类能解决什么问题
  • 配上最简例子,一眼看懂怎么用
  • 构建整体认知,不遗漏关键模块

一、Commons Lang3 是什么?

它是 Apache 提供的纯 Java 工具库,用于补充 Java 标准库中缺失或不够安全/便捷的常用操作,覆盖:

  • 字符串(String)
  • 对象(Object)
  • 数组(Array)
  • 数字(Number)
  • 异常(Exception)
  • 枚举(Enum)
  • 反射(Reflection)
  • 构建器(Builder)
  • 断言(Validate)
  • 随机(Random)
  • 系统(System)

⚠️ 注意:它不依赖任何其他库(包括 Commons Lang2),完全独立,Java 8+ 友好。


二、核心工具类一览表(按功能分类)

工具类 核心用途 最简示例
StringUtils 安全处理字符串 StringUtils.isBlank(str)
ObjectUtils 安全处理对象 ObjectUtils.defaultIfNull(obj, "default")
ArrayUtils 操作数组(增删查) ArrayUtils.add(arr, "x")
NumberUtils 安全解析/判断数字 NumberUtils.toInt("123", 0)
ExceptionUtils 异常信息提取 ExceptionUtils.getMessage(e)
EnumUtils 枚举操作 EnumUtils.getEnum(Color.class, "RED")
ClassUtils 类反射辅助 ClassUtils.getShortClassName(MyClass.class)
ConstructorUtils / MethodUtils 安全调用构造器/方法 MethodUtils.invokeMethod(obj, "getName")
Validate 参数校验(代替 if-throw) Validate.notNull(param, "param must not be null")
RandomStringUtils 生成随机字符串 RandomStringUtils.randomAlphabetic(8)
SystemUtils 获取系统信息 SystemUtils.IS_OS_WINDOWS
Builder / ToStringBuilder / EqualsBuilder / HashCodeBuilder 辅助生成 toString()/equals()/hashCode() 见下文

三、逐类详解 + 极简例子(看一眼就会)

1. StringUtils ------ 字符串全能选手

java 复制代码
// 判空(null / "" / 全空格 都算空)
boolean empty = StringUtils.isEmpty(null);        // true
boolean blank = StringUtils.isBlank("   ");      // true

// 默认值(null 变成指定值)
String name = StringUtils.defaultString(null, "guest"); // "guest"

// 截断但不抛异常
String short = StringUtils.abbreviate("Hello World", 8); // "Hello..."

// 是否包含忽略大小写
boolean has = StringUtils.containsIgnoreCase("ABC", "b"); // true

2. ObjectUtils ------ 对象安全处理

java 复制代码
// null 安全的 toString
String s = ObjectUtils.toString(null, "N/A"); // "N/A"

// 获取默认值
Object obj = ObjectUtils.defaultIfNull(null, "fallback"); // "fallback"

// 安全 equals(两边都可能 null)
boolean eq = ObjectUtils.equals(null, null); // true(不会 NPE!)

3. ArrayUtils ------ 数组操作(返回新数组)

java 复制代码
String[] arr = {"a", "b"};

arr = ArrayUtils.add(arr, "c");           // ["a", "b", "c"]
arr = ArrayUtils.remove(arr, 0);          // ["b", "c"]
arr = ArrayUtils.insert(1, arr, "x");     // ["b", "x", "c"]

boolean has = ArrayUtils.contains(arr, "x"); // true
boolean empty = ArrayUtils.isEmpty(arr);     // false

4. NumberUtils ------ 数字转换不怕错

java 复制代码
int n1 = NumberUtils.toInt("123");        // 123
int n2 = NumberUtils.toInt("abc", -1);    // -1(默认值)

// 判断是否是有效数字(包括 3.14、-5、1e10 等)
boolean isNum = NumberUtils.isCreatable("3.14"); // true
boolean isInt = NumberUtils.isParsable("123");   // true(只能是整数格式)

5. Validate ------ 参数校验,替代 if + throw

java 复制代码
public void setName(String name) {
    Validate.notBlank(name, "Name must not be blank");
    Validate.isTrue(name.length() <= 50, "Name too long");
    this.name = name;
}
// 若 name 为 null/空,会自动抛出 IllegalArgumentException

6. ExceptionUtils ------ 异常调试好帮手

java 复制代码
try {
    // ...
} catch (Exception e) {
    // 获取异常消息(包括 cause 的)
    String msg = ExceptionUtils.getMessage(e);
    
    // 获取根异常(最底层的 cause)
    Throwable root = ExceptionUtils.getRootCause(e);
    
    // 获取完整堆栈为字符串(便于日志记录)
    String trace = ExceptionUtils.getStackTrace(e);
}

7. EnumUtils ------ 枚举安全获取

java 复制代码
enum Color { RED, GREEN, BLUE }

// 安全获取枚举(大小写不敏感 + 默认值)
Color c1 = EnumUtils.getEnum(Color.class, "red"); // RED
Color c2 = EnumUtils.getEnum(Color.class, "yellow", Color.RED); // RED(默认)

// 判断是否存在
boolean exists = EnumUtils.isValidEnum(Color.class, "RED"); // true

8. ToStringBuilder / EqualsBuilder / HashCodeBuilder

自动实现 toString(), equals(), hashCode(),避免手写错误。

java 复制代码
public class Person {
    private String name;
    private int age;

    @Override
    public String toString() {
        return new ToStringBuilder(this)
            .append("name", name)
            .append("age", age)
            .toString(); // 输出: Person[name=John,age=30]
    }

    @Override
    public boolean equals(Object obj) {
        return EqualsBuilder.reflectionEquals(this, obj);
    }

    @Override
    public int hashCode() {
        return HashCodeBuilder.reflectionHashCode(this);
    }
}

✅ 适合快速原型开发;生产环境更推荐用 Lombok(但 Lang3 无需注解,兼容性更强)。


9. SystemUtils ------ 获取系统信息

java 复制代码
boolean isWin = SystemUtils.IS_OS_WINDOWS;
boolean isLinux = SystemUtils.IS_OS_LINUX;
String javaVersion = SystemUtils.JAVA_VERSION;
String userHome = SystemUtils.USER_HOME;

10. RandomStringUtils ------ 测试用随机字符串

java 复制代码
String letters = RandomStringUtils.randomAlphabetic(5);   // "aBcDe"
String digits  = RandomStringUtils.randomNumeric(6);     // "123456"
String mixed   = RandomStringUtils.randomAlphanumeric(8); // "x3K9mQ2p"

11. ClassUtils / MethodUtils ------ 反射简化

java 复制代码
// 获取简单类名(不含包)
String shortName = ClassUtils.getShortClassName(ArrayList.class); // "ArrayList"

// 调用对象方法(无需处理 IllegalAccessException 等)
Object result = MethodUtils.invokeMethod(obj, "getName");

四、如何全面掌握?

  1. 记住核心思想"避免 NPE,简化常见操作,补足 JDK 不足"
  2. 按需查阅:遇到字符串、数组、校验、异常处理等场景,优先想 "Lang3 有没有?"
  3. 常用类优先掌握
    • StringUtils
    • Validate
    • ObjectUtils
    • ArrayUtils
    • NumberUtils
  4. 看源码/Javadoc:所有方法命名清晰,文档完善,IDE 自动提示即可上手。

五、引入方式(Maven)

xml 复制代码
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.14.0</version> <!-- 推荐用最新版 -->
</dependency>

⏳ 更新频繁,功能稳定,可放心升级。


总结一句话:

Commons Lang3 是 Java 开发者的"瑞士军刀"------它不解决业务问题,但让你写业务代码时更安全、更简洁、更少出错。

掌握上述 10+ 个工具类的核心用途,你就能全面理解并高效使用 Lang3,大幅提升开发效率和代码健壮性 ✅。

相关推荐
泽济天下2 小时前
Spring Boot 4.0 新特性全解:基线升级、Web 生态换代、API 版本治理、声明式 HTTP Client
spring boot
我爱学习好爱好爱2 小时前
Springboot+OSHI+Vue+ECharts 全栈监控系统
vue.js·spring boot·echarts
想不明白的过度思考者4 小时前
Spring Boot 配置文件深度解析
java·spring boot·后端
隔壁阿布都12 小时前
使用LangChain4j +Springboot 实现大模型与向量化数据库协同回答
人工智能·spring boot·后端
古城小栈13 小时前
Spring Boot 数据持久化:MyBatis-Plus 分库分表实战指南
spring boot·后端·mybatis
悟能不能悟13 小时前
springboot全局异常
大数据·hive·spring boot
+VX:Fegn089514 小时前
计算机毕业设计|基于springboot + vue宠物寄养系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计·宠物
一 乐14 小时前
校园实验室|基于springboot + vue校园实验室管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
Lisonseekpan15 小时前
Spring Boot Email 邮件发送完全指南
java·spring boot·后端·log4j