Apache Commons Lang 3

简单来说,Apache Commons Lang 是一个提供了大量Java标准库(java.lang 及其周边)增强功能的工具类库。它封装了许多常用但JDK本身没有提供的实用方法,旨在让Java开发更高效、代码更简洁、更健壮。


核心概述

  • 官方名称: Apache Commons Lang
  • 最新主流版本: Commons Lang 3 (这是一个与老版本 Lang 2 不兼容的重大升级,建议新项目直接使用 3)
  • 作用: 填补 JDK 在基础数据处理、方法调用、并发、文本操作等方面的不足,提供了大量"开箱即用"的静态工具方法。
  • 设计理念: 提供高质量、可重用、线程安全的工具类,所有方法都是静态的。

为什么开发者喜欢用它?

因为它解决了日常开发中非常多"琐碎的痛点",你很可能写过它里面已经实现的方法。使用它可以:

  1. 避免"重复造轮子": 你不用再自己写字符串是否为空的判断、对象toString、equals和hashCode方法等。
  2. 提高代码健壮性 (Null-Safe) : 库中的许多方法都进行了安全的 null 值检查,避免了烦人的 NullPointerException
  3. 使代码更简洁、可读性更强 : 一行清晰的工具方法调用可以替代多行的if-else判断和循环。
  4. 遵循最佳实践: 这些工具类由社区顶尖开发者维护和评审,实现了高效、可靠的算法。

它提供了哪些常用功能?(附代码示例)

以下是一些最常用和核心的类及其功能:

1. StringUtils - 字符串工具类 (使用频率最高)

处理 null 安全的字符串操作。

java 复制代码
// 判断字符串是否为空或空白 (优于 if(str != null && !str.isEmpty()))
StringUtils.isEmpty(null);      // true
StringUtils.isEmpty("");        // true
StringUtils.isEmpty(" ");       // false
StringUtils.isBlank(" ");       // true (会trim空格)

// 截取、查找、反转等操作都是null安全的
StringUtils.substring("Hello", 2);     // "llo"
StringUtils.substring(null, 2);        // null (不会抛NPE)

StringUtils.reverse("ABC");            // "CBA"

// 判断字符串是否包含某字符,忽略大小写
StringUtils.containsIgnoreCase("Apple", "APP"); // true

// 用指定字符串连接数组元素
StringUtils.join(new String[]{"a", "b", "c"}, ","); // "a,b,c"
2. ObjectUtils - 对象工具类

安全地操作对象。

java 复制代码
// 第一个非空对象
ObjectUtils.defaultIfNull(nullObject, "defaultValue");

// 安全的toString,对象为null时返回指定字符串
ObjectUtils.toString(null);            // "null"
ObjectUtils.toString(null, "ERROR");   // "ERROR"

// 比较两个对象 (null-safe)
ObjectUtils.equals(object1, object2);  // 等效于 java.util.Objects.equals()
3. ArrayUtils - 数组工具类

提供了标准JDK数组类所没有的功能。

java 复制代码
// 判断数组是否为空
ArrayUtils.isEmpty(new String[]{});    // true
ArrayUtils.isEmpty(null);              // true

// 向数组添加元素 (返回新数组)
String[] array = {"a", "b"};
array = ArrayUtils.add(array, "c"); // ["a", "b", "c"]

// 反转数组
ArrayUtils.reverse(array); // 变为 ["c", "b", "a"]

// 检查是否包含某个元素
ArrayUtils.contains(array, "b"); // true
4. RandomUtilsRandomStringUtils

生成随机数和随机字符串。

java 复制代码
// 生成指定范围内的随机int/long
int randomInt = RandomUtils.nextInt(1, 100);

// 生成随机字符串
String randomAlphabetic = RandomStringUtils.randomAlphabetic(10); // 10个字母
String randomNumeric = RandomStringUtils.randomNumeric(6);       // 6位数字
5. SystemUtils

获取系统属性,方便跨平台。

java 复制代码
// 判断Java版本
SystemUtils.IS_JAVA_8;   // 是否是Java 8
SystemUtils.IS_JAVA_11;  // 是否是Java 11

// 判断操作系统
SystemUtils.IS_OS_WINDOWS;
SystemUtils.IS_OS_LINUX;
6. 构建器:EqualsBuilder, HashCodeBuilder, ToStringBuilder

帮助快速、正确地重写 equals(), hashCode(), 和 toString() 方法,避免了手动编写容易出错的代码。

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

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return new EqualsBuilder()
                .append(age, person.age)
                .append(name, person.name)
                .isEquals();
    }

    @Override
    public int hashCode() {
        return new HashCodeBuilder(17, 37)
                .append(name)
                .append(age)
                .toHashCode();
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this)
                .append("name", name)
                .append("age", age)
                .toString();
    }
}

如何在项目中使用?

如果你的项目使用 Maven ,在 pom.xml 中添加以下依赖即可:

xml 复制代码
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.14.0</version> <!-- 请检查并使用最新版本 -->
</dependency>

如果使用 Gradle

gradle 复制代码
implementation 'org.apache.commons:commons-lang3:3.14.0'

总结

Apache Commons Lang 是Java开发者工具箱中一件不可或缺的"瑞士军刀" 。它极大地简化了基础代码的编写,提高了开发效率和代码质量。虽然现代JDK(如 Java 8+ 的 java.util.Objects)也吸收了一些类似思想,但 Commons Lang 在广度和深度上依然远超JDK,是绝大多数Java项目的标准基础依赖。

相关推荐
smilejingwei2 分钟前
数据分析编程第五步:数据准备与整理
大数据·开发语言·数据分析·esprocspl
猿饵块7 分钟前
stl--std::map
开发语言·c++·rpc
爱学习的小道长14 分钟前
Python 比较huggingface_hub库的hf_hub_download函数和snapshot_download函数
开发语言·python
励志不掉头发的内向程序员29 分钟前
STL库——vector(类模拟实现)
开发语言·c++
传奇开心果编程43 分钟前
【传奇开心果系列】Flet框架实现的图形化界面的PDF转word转换器办公小工具自定义模板
前端·python·学习·ui·前端框架·pdf·word
竹子_231 小时前
《零基础入门AI: 目标检测基础知识》
人工智能·python·目标检测·计算机视觉
简单点了1 小时前
SM4加密算法
java·开发语言
aFakeProgramer2 小时前
使用 ROS2 构建客户端-服务器通信:一个简单的计算器示例
开发语言·python·ros2
ALex_zry2 小时前
Golang云端编程入门指南:前沿框架与技术全景解析
开发语言·后端·golang
jinlei20093 小时前
在python 代码中调用rust 源码库操作步骤
开发语言·python·rust