Groovy 中的安全导航运算符
Posted
技术标签:
【中文标题】Groovy 中的安全导航运算符【英文标题】:Safe navigation operator in Groovy 【发布时间】:2012-03-13 15:15:26 【问题描述】:我使用安全导航运算符来避免这样的 NPE
myInstance?.field1
myInstance?.field2
myInstance?.field3
为了在我写的for循环中转换上面的代码
<g:each var="i" in="$ (1..<4 ">
myInstance['field'+i]
</g:each>
当我以 hashmap 格式检索值时,如何在上述代码中使用安全导航运算符? 我查看了文档here,但没有类似的示例。
【问题讨论】:
【参考方案1】:我会使用这种语法:
myInstance?."field$i"
【讨论】:
这行得通,但是否有关于何时使用单引号和何时使用双引号的指南?我可以互换使用它们,但在这种情况下,只有双引号有效! 双引号之所以有效,是因为它与嵌入的表达式 ($i
) 一起生成了一个 GString,并且通过这种方式动态获取属性或调用方法需要特殊处理。【参考方案2】:
你可以这样做:
<g:each var="i" in="$ (1..<4 ">
$myInstance?."field$i"
</g:each>
或者,可能更好(并且在您的代码中更整洁)是 make this a tag 并像上面在纯 groovy 标记中那样做。
【讨论】:
以上是关于Groovy 中的安全导航运算符的主要内容,如果未能解决你的问题,请参考以下文章
javascript 中是不是有空合并 (Elvis) 运算符或安全导航运算符?
Groovy 安全导航(safe-navigation)操作符(?.)
Groovy集合遍历 ( 调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 | =~ 运算符等价于 contains 函数 | 代码示例 )