此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

Varargs 调用

Spring 表达式语言支持构造函数方法和用户定义函数varargs 调用。spring-doc.cadn.net.cn

以下示例演示如何调用java.lang.String#formatted(Object…​) varargs 方法,方法是将变量参数列表作为单独的 参数 ('blue', 1).spring-doc.cadn.net.cn

// evaluates to "blue is color #1"
String expression = "'%s is color #%d'.formatted('blue', 1)";
String message = parser.parseExpression(expression).getValue(String.class);
// evaluates to "blue is color #1"
val expression = "'%s is color #%d'.formatted('blue', 1)"
val message = parser.parseExpression(expression).getValue(String::class.java)

变量参数列表也可以作为数组提供,如 以下示例 (new Object[] {'blue', 1}).spring-doc.cadn.net.cn

// evaluates to "blue is color #1"
String expression = "'%s is color #%d'.formatted(new Object[] {'blue', 1})";
String message = parser.parseExpression(expression).getValue(String.class);
// evaluates to "blue is color #1"
val expression = "'%s is color #%d'.formatted(new Object[] {'blue', 1})"
val message = parser.parseExpression(expression).getValue(String::class.java)

作为替代方案,可以将变量参数列表作为java.util.List–为 example,作为内联列表 ({'blue', 1}).下面的示例演示如何执行此作。spring-doc.cadn.net.cn

// evaluates to "blue is color #1"
String expression = "'%s is color #%d'.formatted({'blue', 1})";
String message = parser.parseExpression(expression).getValue(String.class);
// evaluates to "blue is color #1"
val expression = "'%s is color #%d'.formatted({'blue', 1})"
val message = parser.parseExpression(expression).getValue(String::class.java)

Varargs 类型转换

与 Java 中对 varargs 调用的标准支持相反,类型转换可以是 在调用 varargs 构造函数、方法或 函数。spring-doc.cadn.net.cn

例如,如果我们在EvaluationContext在名称下#reverseStrings对于具有String reverseStrings(String…​ strings),我们可以在 SpEL 中调用该函数 expression 中带有任何可转换为String,如 以下示例。spring-doc.cadn.net.cn

// evaluates to "3.0, 2.0, 1, SpEL"
String expression = "#reverseStrings('SpEL', 1, 10F / 5, 3.0000)";
String message = parser.parseExpression(expression)
		.getValue(evaluationContext, String.class);
// evaluates to "3.0, 2.0, 1, SpEL"
val expression = "#reverseStrings('SpEL', 1, 10F / 5, 3.0000)"
val message = parser.parseExpression(expression)
		.getValue(evaluationContext, String::class.java)

同样,任何组件类型是所需 varargs 类型的子类型的数组都可以 作为 varargs 调用的变量参数列表提供。例如,String[]数组可以提供给接受Object…​argument 列表。spring-doc.cadn.net.cn

下面的清单表明我们可以提供String[]数组添加到java.lang.String#formatted(Object…​) varargs 方法。它还强调1将自动转换为"1".spring-doc.cadn.net.cn

// evaluates to "blue is color #1"
String expression = "'%s is color #%s'.formatted(new String[] {'blue', 1})";
String message = parser.parseExpression(expression).getValue(String.class);
// evaluates to "blue is color #1"
val expression = "'%s is color #%s'.formatted(new String[] {'blue', 1})"
val message = parser.parseExpression(expression).getValue(String::class.java)