Elvis运算符在创建字符串时

时间:2015-03-18 11:48:41

标签: groovy operators

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

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

Hello Anonymous方法返回getLoggedInUser时,我们希望该邮件的值为null。但是,通过上面的示例,当方法返回空值时,message的值为Hello null

此示例有效:

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

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

1 个答案:

答案 0 :(得分:2)

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

这将有效:

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

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

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