gpt4 book ai didi

grails - Groovy/GSP 中鸭子打字的安全操作符

转载 作者:行者123 更新时间:2023-12-05 00:00:26 24 4
gpt4 key购买 nike

我是 Grails 开发的新手,我想知道处理这个问题的标准方法是什么:

在 GSP 中,我正在遍历域对象列表,其中很多,但并非所有对象都具有 getX() 方法。我想要一个看起来像这样的标签:

<g:each in="${myObjects}>
${it.x}
</g:each>

但是,由于我的某些对象没有 getX 方法,因此我收到“无此类属性”异常。如果有某种像“安全运算符(operator)”这样的运算符(operator)来防止 NPE,我会很高兴。有没有不做“instanceof”的好方法来处理这个问题?

最佳答案

恐怕 Groovy 的运算符(operator)不会在这里帮助您。 safe navigation operator ( ?. )如果您要调用方法的引用可能为空,则会对您有所帮助;和 Elvis operator ( ?: )如果您的 x 会帮助您property 将是所有对象的属性,除了其中一些可能为 null(类似于 it.x ?: 'no x here' )。

在这种情况下--我假设您正在处理不同类的对象集合,其中一些没有 x属性——你可以询问对象是否有属性x (注意,如果对象实现了一个名为 getX 的方法,那么 it.hasProperty('x') 将为真):

<g:each in="${myObjects}>
${it.hasProperty('x') ? it.x : 'no x here'}
</g:each>

更换 'no x here'无论您的后备值是什么,都可以使用。此外,您可以考虑使用 <g:if> / <g:else> 如果两个选项的逻辑比简单表达式更复杂,则使用标签而不是三元运算符:)

关于grails - Groovy/GSP 中鸭子打字的安全操作符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com