|
对于最新的稳定版本,请使用 Spring Framework 7.0.6! |
可变参数调用
以下示例展示了如何在表达式中调用带有java.lang.String#formatted(Object…)
可变参数的方法,通过将可变参数列表作为单独的参数提供('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 – 例如,作为内联列表
({'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)
可变参数类型转换
与Java中标准的可变参数调用支持不同, 在SpEL中调用可变参数构造函数、方法或函数时,可以 对各个参数应用类型转换。
例如,如果我们在EvaluationContext中为具有签名String reverseStrings(String… strings)的方法注册了一个名为#reverseStrings的自定义
函数,我们可以在SpEL表达式中使用任何可以转换为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)
同样地,任何组件类型为所需可变参数类型的子类型的数组都可以作为可变参数调用的变量参数列表提供。例如,可以将String[]数组提供给接受Object…参数列表的可变参数调用。
以下列表演示了我们可以向java.lang.String#formatted(Object…) 可变参数方法提供一个String[]数组。同时,它也强调了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)