深色模式
数组(Arrays)
#arrays 是 Thymeleaf 专为数组设计的工具对象,提供空值安全的数组转换、长度计算、判空、元素包含判断等核心操作(底层对应 org.thymeleaf.expression.Arrays 类,可参考其 JavaDoc 获取完整 API)。
java
/*
* ======================================================================
* 请查阅 org.thymeleaf.expression.Arrays 类的 Javadoc API 文档
* ======================================================================
*/
/*
* 将任意对象转换为数组,并尝试推断数组的组件类型(元素类型)。
* 注意:若转换后的数组为空,或目标对象的元素并非全部属于同一类型,
* 此方法将返回 Object[] 类型的数组。
*/
${#arrays.toArray(object)}
/*
* 转换为指定组件类型(元素类型)的数组。
*/
${#arrays.toStringArray(object)}
${#arrays.toIntegerArray(object)}
${#arrays.toLongArray(object)}
${#arrays.toDoubleArray(object)}
${#arrays.toFloatArray(object)}
${#arrays.toBooleanArray(object)}
/*
* 计算数组的长度(即元素个数)
*/
${#arrays.length(array)}
/*
* 检查数组是否为空(无任何元素)
*/
${#arrays.isEmpty(array)}
/*
* 检查数组中是否包含指定的单个元素,或所有指定元素
*/
${#arrays.contains(array, element)}
${#arrays.containsAll(array, elements)}补充说明(贴合 Thymeleaf 数组操作技术语境)
1. 核心术语解析
| 英文术语 | 译法/说明 |
|---|---|
| Arrays | 数组工具类(Thymeleaf 表达式工具,#arrays 是其在模板中的简写,专用于操作 Java 数组) |
| infer array component class | 推断数组的组件类型(即数组元素的类型,如 String、Integer 等) |
| toArray/toXXXArray | 通用数组转换/指定类型数组转换(toXXXArray 强制转换为对应基本类型/包装类数组) |
| length | 长度(对应 Java 中 array.length,区别于集合的 size() 方法) |
| isEmpty | 是否为空(数组长度为 0 时返回 true,无元素的空数组而非 null) |
| contains/containsAll | 包含单个元素/包含所有元素(elements 为数组/集合类型,需所有元素存在才返回 true) |
2. 关键逻辑解读(实战示例)
假设模板中有变量 listData = {"apple", 123, "banana"}(混合类型 List)、strList = {"a", "b", "c"}(纯字符串 List),核心用法如下:
html
<!-- 1. 通用数组转换(推断类型) -->
<div th:with="
// 混合类型元素 → 推断为 Object[]
mixArray=${#arrays.toArray(listData)},
// 纯字符串元素 → 推断为 String[]
strArray=${#arrays.toArray(strList)}
">
混合类型数组类型:<span th:text="${mixArray.getClass().getName()}"></span> <!-- 输出 [Ljava.lang.Object; -->
纯字符串数组类型:<span th:text="${strArray.getClass().getName()}"></span> <!-- 输出 [Ljava.lang.String; -->
</div>
<!-- 2. 指定类型数组转换(强制类型) -->
<div th:with="
numList=${{1,2,3}},
intArray=${#arrays.toIntegerArray(numList)}
">
整数数组长度:<span th:text="${#arrays.length(intArray)}"></span> <!-- 输出 3 -->
</div>
<!-- 3. 基础检查与元素验证 -->
<div th:with="emptyArray=${#arrays.toArray(T(java.util.Collections).emptyList())}">
空数组检查:<span th:text="${#arrays.isEmpty(emptyArray)}"></span> <!-- 输出 true -->
<div th:if="${#arrays.contains(intArray, 2)}">包含元素 2</div> <!-- 显示 -->
</div>- 核心特性:
toArray()优先推断元素的共同类型,混合类型/空数组会返回Object[];toXXXArray()强制转换为指定类型,若元素无法转换(如字符串转整数)会抛出ClassCastException;containsAll的第二个参数必须是数组/集合类型,传入单个值会报错。
3. 句式优化说明
- 补充“(元素类型)”注释解释
component class,贴合新手对“数组组件类型”的理解盲区; - 将原文长句拆分为“核心功能+注意事项”的结构,明确
toArray()的类型推断规则; - 保留
${#arrays.xxx}表达式原样,注释简洁且突出“类型推断”“强制转换”等核心差异点。
总结
#arrays核心作用:在 Thymeleaf 模板中便捷实现“对象→数组”的转换,以及数组的长度、空值、元素存在性检查;- 核心用法分类:
- 数组转换:
toArray(object)(自动推断类型,混合/空元素返回 Object[])、toXXXArray(object)(强制转为指定类型数组); - 基础属性:
length(array)(获取数组长度)、isEmpty(array)(判断是否为空数组); - 元素验证:
contains(array, element)(单元素)、containsAll(array, elements)(多元素);
- 数组转换:
- 关键注意点:
toXXXArray()需确保元素类型匹配,否则会触发类型转换异常;toArray()对混合类型元素会降级为 Object[]。
