跳到主要内容

Elvis 操作符

DeepSeek V3 中英对照 The Elvis Operator

Elvis 操作符是三元操作符语法的简写形式,主要用于 Groovy 语言中。在使用三元操作符语法时,通常需要重复变量两次,如下例所示:

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

相反,你可以使用 Elvis 操作符(因其与猫王的发型相似而得名)。以下示例展示了如何使用 Elvis 操作符:

ExpressionParser parser = new SpelExpressionParser();

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

SpEL 的 Elvis 运算符除了检查 null 对象外,还会检查字符串。因此,原始代码片段仅接近于模拟该运算符的语义(还需要额外的 !name.isEmpty() 检查)。

以下清单展示了一个更复杂的示例:

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
java
备注

你可以使用 Elvis 操作符在表达式中应用默认值。以下示例展示了如何在 @Value 表达式中使用 Elvis 操作符:

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

如果定义了系统属性 pop3.port,则会注入该属性值,否则会注入 25。