Elvis 運算子

Elvis 運算子是三元運算子語法的縮寫,用於 Groovy 語言。使用三元運算子語法,您通常必須重複變數兩次,如下列範例所示

String name = "Elvis Presley";
String displayName = (name != null ? name : "Unknown");

相反地,您可以使用 Elvis 運算子(以其與 Elvis 髮型的相似性命名)。下列範例顯示如何使用 Elvis 運算子

  • Java

  • Kotlin

ExpressionParser parser = new SpelExpressionParser();

String name = parser.parseExpression("name?:'Unknown'").getValue(new Inventor(), String.class);
System.out.println(name);  // 'Unknown'
val parser = SpelExpressionParser()

val name = parser.parseExpression("name?:'Unknown'").getValue(Inventor(), String::class.java)
println(name)  // 'Unknown'
SpEL Elvis 運算子除了 null 物件之外,還會檢查字串。因此,原始程式碼片段僅接近於模擬運算子的語意(它需要額外的 !name.isEmpty() 檢查)。

以下清單顯示更複雜的範例

  • Java

  • Kotlin

ExpressionParser parser = new SpelExpressionParser();
EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();

Inventor tesla = new Inventor("Nikola Tesla", "Serbian");
String name = parser.parseExpression("name?:'Elvis Presley'").getValue(context, tesla, String.class);
System.out.println(name);  // Nikola Tesla

tesla.setName("");
name = parser.parseExpression("name?:'Elvis Presley'").getValue(context, tesla, String.class);
System.out.println(name);  // Elvis Presley
val parser = SpelExpressionParser()
val context = SimpleEvaluationContext.forReadOnlyDataBinding().build()

val tesla = Inventor("Nikola Tesla", "Serbian")
var name = parser.parseExpression("name?:'Elvis Presley'").getValue(context, tesla, String::class.java)
println(name)  // Nikola Tesla

tesla.setName("")
name = parser.parseExpression("name?:'Elvis Presley'").getValue(context, tesla, String::class.java)
println(name)  // Elvis Presley

您可以使用 Elvis 運算子在運算式中套用預設值。下列範例顯示如何在 @Value 運算式中使用 Elvis 運算子

@Value("#{systemProperties['pop3.port'] ?: 25}")

如果定義了系統屬性 pop3.port,這將會注入該屬性,否則會注入 25。