groovy null安全操作员无法正常工作

时间:2018-05-01 22:33:13

标签: groovy

尝试这样做:

var = obj?.Prop ?: obj.Prop.toLowerCase()

但我一直在接受:

java.lang.NullPointerException: Cannot get property 'Prop' on null object

这不是?的用途吗?我的理解是obj?.Prop与:

相同
if ( obj != null && obj.Prop ) { .. }

有时候obj为null,但是如果不是我想将obj.Prop设置为在null对象上设置为toLowerCase()的低级情况

2 个答案:

答案 0 :(得分:3)

您需要执行obj?.Prop?.toLowerCase()

?:为空时,Elvis operato r(obj.Prop.toLowerCase())导致obj?.Prop被评估。这相当于写作

var = (obj?.Prop != null) ? obj.Prop : obj.Prop.toLowerCase()

答案 1 :(得分:1)

?之后的表达式:是前面的表达式为null的情况的替代方法。如果您在替代中使用与前一部分中使用的相同的对象,那么您将触发一个npe

取而代之的是

obj?.Prop?.toLowerCase()