此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
Varargs 调用
以下示例演示如何调用java.lang.String#formatted(Object…)
varargs 方法,方法是将变量参数列表作为单独的
参数 ('blue', 1
).
-
Java
-
Kotlin
// 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}
).
-
Java
-
Kotlin
// 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}
).下面的示例演示如何执行此作。
-
Java
-
Kotlin
// 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 构造函数、方法或 函数。
例如,如果我们在EvaluationContext
在名称下#reverseStrings
对于具有String reverseStrings(String… strings)
,我们可以在 SpEL 中调用该函数
expression 中带有任何可转换为String
,如
以下示例。
-
Java
-
Kotlin
// 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 列表。
下面的清单表明我们可以提供String[]
数组添加到java.lang.String#formatted(Object…)
varargs 方法。它还强调1
将自动转换为"1"
.
-
Java
-
Kotlin
// 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)