当前位置: 首页 > backend >正文

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 安全的字符串操作。

// 判断字符串是否为空或空白 (优于 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 - 对象工具类

安全地操作对象。

// 第一个非空对象
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数组类所没有的功能。

// 判断数组是否为空
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

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

// 生成指定范围内的随机int/long
int randomInt = RandomUtils.nextInt(1, 100);// 生成随机字符串
String randomAlphabetic = RandomStringUtils.randomAlphabetic(10); // 10个字母
String randomNumeric = RandomStringUtils.randomNumeric(6);       // 6位数字
5. SystemUtils

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

// 判断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() 方法,避免了手动编写容易出错的代码。

public class Person {private String name;private int age;@Overridepublic 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();}@Overridepublic int hashCode() {return new HashCodeBuilder(17, 37).append(name).append(age).toHashCode();}@Overridepublic String toString() {return new ToStringBuilder(this).append("name", name).append("age", age).toString();}
}

如何在项目中使用?

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

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

如果使用 Gradle

implementation 'org.apache.commons:commons-lang3:3.14.0'

总结

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

http://www.xdnf.cn/news/18829.html

相关文章:

  • 野火STM32Modbus主机读取寄存器/线圈失败(二)-解决CRC校验错误
  • uC/OS-III 队列相关接口
  • 数据分析与数据挖掘
  • 企业如何构建全面的高防IP防护体系?
  • Teams Workflows 业务流程搭建与Linux自动化运维拓展应用全解析
  • 状态设计模式
  • 构建面向人工智能决策的世界模型引擎所需的基本知识体系
  • 如何在GitHub找到10k+个stars的仓库
  • podman启动mongdb的container因为权限问题导致changing ownership和读取storage.bson失败的解决方法
  • CMake构建学习笔记20-iconv库的构建
  • 算法概述篇
  • 游戏空间划分技术
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(20):文法+单词第7回2
  • 广告推荐模型1:逻辑回归(Logistic Regression,LR)
  • 如何拯救一家濒临破产的科技公司?
  • 技术总结:AArch64架构下Jenkins Agent(RPM容器编译节点)掉线问题分析与排查
  • KubeBlocks for Oracle 容器化之路
  • 【RAGFlow代码详解-30】构建系统和 CI/CD
  • 微服务-28.配置管理-共享配置
  • poi生成word固定表格列宽
  • TensorFlow 面试题及详细答案 120道(61-70)-- 高级特性与工具
  • css3背景线性渐变:linear-gradient
  • 【密集目标检测】停车场车辆(车位)识别数据集:12k+图像,yolo标注
  • 04 网络信息内容安全--入侵检测技术
  • 依托边缘计算方案,移动云全面化解算力、效率、安全平衡难题
  • from中烟科技翼支付 面试题2
  • 高频面试题:说一下线程池吧?(线程池原理,核心参数,创建方式,应用场景都要说到才能让面试官心服口服)
  • Pytorch深度学习(小土堆)
  • Java 企业应用单点登录(SSO)实现方案详解
  • 如何对springboot mapper 编写单元测试