什么“foo?.bar”在Groovy中意味着什么?

时间:2015-07-24 10:12:36

标签: groovy syntax

#{if adsonuiAssetList.size()>0}
    #{list items:adsonuiAssetList, as:'adsonui'}
        <div class="imageElement">
            <h3>Asset : ${adsonui?.productname}(${adsonui?.AssetId})&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Advertiser : ${adsonui?.campaign.advertiser.contact_person}(${adsonui?.campaign.advertiser.id})</h3>
            <p></p>
            <a href="@{Assets.showAssetDetails()}?assetid=${adsonui?.AssetId}"  title="${adsonui?.productname}" class="open"></a>
            <img src="@{Assets.getAssetFileForSlideShow(adsonui?.AssetId,adsonui?.campaign?.mode_of_advertisement,870,240)}"  alt="${adsonui?.productname}" class="full" />
            <img src="@{Assets.getAssetFileForSlideShow(adsonui?.AssetId,adsonui?.campaign?.mode_of_advertisement,150,150)}"  alt="${adsonui?.productname}" class="thumbnail" />
    </div>
    #{/list}
#{/if}

任何人都可以解释$ {adsonui?.productname}将会是什么?。请为我做新的groovy和播放框架pelase告诉我它究竟在做什么。

2 个答案:

答案 0 :(得分:1)

如果${adsonui?.productname}不为空,

adsonui.productname将返回adsonui

如果它为空,则为null

它被称为Safe-Navigation Operator

答案 1 :(得分:1)

?在foo为空的情况下,可以避免NPE异常。

参见axample - 第一个println为null,第二个失败

def foo

println foo?.bar

null

println foo.bar

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

即。你不需要测试foo是否为null并决定你是否可以引用bar