You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2019/11/24 02:05:00 UTC
[jira] [Updated] (GROOVY-3525) Null-safe dereference operator not
available for subscript operator access to properties or array/list
elements
[ https://issues.apache.org/jira/browse/GROOVY-3525?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King updated GROOVY-3525:
------------------------------
Fix Version/s: (was: 3.0.0)
3.0.0-alpha-1
> Null-safe dereference operator not available for subscript operator access to properties or array/list elements
> ---------------------------------------------------------------------------------------------------------------
>
> Key: GROOVY-3525
> URL: https://issues.apache.org/jira/browse/GROOVY-3525
> Project: Groovy
> Issue Type: Bug
> Components: groovy-runtime
> Affects Versions: 1.6, 1.6.1, 1.6.2, 1.6.3, 2.4.0-beta-4
> Reporter: Marc Palmer
> Assignee: Daniel Sun
> Priority: Major
> Fix For: 3.0.0-alpha-1
>
>
> The null-safe deref operator causes compiler errors if it is used with the subscript operator.
> Take the following example:
> {code}
> def obj = [name:'Marc Palmer', occupation:'Whining user', ]
> println obj?.name
> {code}
> This is fine. However if you want to use the subscript operator for property access:
> {code}
> def obj = [name:'Marc Palmer', occupation:'Whining user', ]
> def propName = 'name'
> println obj?[propName]
> {code}
> You get errors. Of course you can workaround this with:
> {code}
> def obj = [name:'Marc Palmer', occupation:'Whining user', ]
> def propName = 'name'
> println obj?.getAt[propName]
> println obj?."$propName"
> {code}
> But this is quite ugly if you are in a situation where you need/want to use subscript, and also if this is done properly then we also get nullsafe deref of arrays, lists and sets, especially if they are nested:
> {code}
> def myList = null
> println myList?[0]?['name']
> {code}
> Without this you have to write the equivalent of:
> {code}
> def myList = null
> println myList?.getAt(0)?.getAt('name')
> {code}
> Can't Groovy do this for us?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)