Skip to content

数组(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} 表达式原样,注释简洁且突出“类型推断”“强制转换”等核心差异点。

总结

  1. #arrays 核心作用:在 Thymeleaf 模板中便捷实现“对象→数组”的转换,以及数组的长度、空值、元素存在性检查;
  2. 核心用法分类:
    • 数组转换:toArray(object)(自动推断类型,混合/空元素返回 Object[])、toXXXArray(object)(强制转为指定类型数组);
    • 基础属性:length(array)(获取数组长度)、isEmpty(array)(判断是否为空数组);
    • 元素验证:contains(array, element)(单元素)、containsAll(array, elements)(多元素);
  3. 关键注意点:toXXXArray() 需确保元素类型匹配,否则会触发类型转换异常;toArray() 对混合类型元素会降级为 Object[]。