可変引数呼び出し
Spring 式言語は、コンストラクター、メソッド、およびユーザー定義関数の varargs [Oracle] 呼び出しをサポートします。
次の例は、可変引数リストを個別の引数 ('blue', 1
) として指定して、式内で java.lang.String#formatted(Object…)
varargs メソッドを呼び出す方法を示しています。
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 での varargs 呼び出しの標準サポートとは対照的に、SpEL で varargs コンストラクター、メソッド、関数を呼び出すときに、個々の引数に型変換が適用される場合があります。
たとえば、シグネチャー String reverseStrings(String… strings)
を持つメソッドのカスタム関数を EvaluationContext
に #reverseStrings
という名前で登録した場合、次の例に示すように、String
に変換できる任意の引数を使用して SpEL 式内でその関数を呼び出すことができます。
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…
引数リストを受け入れる varargs 呼び出しに指定できます。
次のリストは、java.lang.String#formatted(Object…)
varargs メソッドに 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)