创建字符串时的 Elvis 运算符

Elvis operator when creating strings

我开始学习了Groovy我来到了这个例子:

message = 'Hello' + userService.getLoggedInUser()?.firstName ?: 'Anonymous'
message += '!'

getLoggedInUser 方法 return null 时,我们希望该消息具有值 Hello Anonymous。但是对于上面的示例,当方法 return 为空值时 message 的值是 Hello null

这个例子有效:

message = 'Hello'
message += userService.getLoggedInUser()?.firstName ?: 'Anonymous'
message += '!

为什么第一个示例不起作用?

它发生是因为 operator precedence(第一个点,然后 +,然后 ?:

这会起作用:

message = 'Hello' + (userService.getLoggedInUser()?.firstName ?: 'Anonymous')
message += '!'

或者更好地使用 GString:s 而不是连接:

message = "Hello ${userService.getLoggedInUser()?.firstName ?: 'Anonymous'}!"