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,大幅提升开发效率和代码健壮性 ✅。

相关推荐
+VX:Fegn08956 小时前
计算机毕业设计|基于springboot + vue小型房屋租赁系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
进阶的小名10 小时前
[超轻量级延时队列(MQ)] Redis 不只是缓存:我用 Redis Stream 实现了一个延时MQ(自定义注解方式)
java·数据库·spring boot·redis·缓存·消息队列·个人开发
y***n61410 小时前
springboot项目架构
spring boot·后端·架构
qq_3181215911 小时前
互联网大厂Java面试故事:支付与金融服务微服务架构、消息队列与AI风控全流程解析
java·spring boot·redis·微服务·kafka·支付系统·金融服务
亲爱的非洲野猪12 小时前
SpringBoot启动流程深度剖析:从@SpringBootApplication到Servlet容器就绪
hive·spring boot·servlet
OpenTiny社区12 小时前
TinyPro v1.4.0 正式发布:支持 Spring Boot、移动端适配、新增卡片列表和高级表单页面
java·前端·spring boot·后端·开源·opentiny
计算机毕设指导612 小时前
基于微信小程序民宿预订管理系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·tomcat·maven
爱码猿13 小时前
Springboot结合thymeleaf模板生成pdf文件
spring boot·后端·pdf
Coder_Boy_14 小时前
基于SpringAI的在线考试系统软件系统验收案例
人工智能·spring boot·软件工程·devops
qq_124987075314 小时前
基于SSM框架的智能密室逃脱信息管理系统(源码+论文+部署+安装)
java·大数据·人工智能·spring boot·后端·毕业设计·计算机毕业设计