groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From paul <pl.grue...@gmail.com>
Subject Re: map constructor for List<CustomObject> ?
Date Mon, 13 Nov 2017 22:57:57 GMT
Am 11.11.2017 um 17:55 schrieb Anthony Hepple:
> If you provide just a setter for listOfSamples, instead of a map 
> constructor that handles all properties, then you can allow Groovy's 
> dynamic map construction process to handle all the other properties. 
Thanks Anthony,

guess that was just too simple and obvious for me to notice :D

Nevertheless I'd be interested in WHY the list-entries are not cast 
automagically. Does Groovy even check the <T> type of list elements, or 
just ignores it?
If someone can give me some insights, that would be much appreciated.

thanks in advance,
Paul

> On 10 November 2017 at 11:04, paul <pl.gruener@gmail.com 
> <mailto:pl.gruener@gmail.com>> wrote:
> 
>     Hi all,
> 
>     I'm doing a little YAML-parsing where I have CustomObjects having
>     Lists of other CustomObjects as properties, but the default map
>     constructor does not seem to work for these lists.
>     example:
> 
>     class Sample {
>        Integer age
>        String name
>     }
>     class SampleCollection {
>        String name
>        List<Sample> listOfSamples
>     }
>     def m = [name:'Collection1',listOfSamples:[
>     [age:10,name:'Anna'],[age:12,name:'Berta'] ]]
>     def c = m as SampleCollection // or c = new SampleCollection(m)
>     assert c.class == SampleCollection // passes
>     assert c.listOfSamples[0].class == Sample // fails
> 
>     First solution I've come up with is adding a custom constructor to
>     SampleCollection like this:
> 
>        SampleCollection(Map map) {
>          name = map.name <http://map.name>
>     //     listOfSamples = map.listOfSamples // cast not working
>          listOfSamples = []
>          map.listOfSamples.each{ sample ->
>            listOfSamples << (sample as Sample)
>          }
>        }
> 
>     This works, but seems rather inefficient, as
>     a) I have to loop through each list with potentially many items and
>     b) SampleCollection has some more simple properties like 'name',
>     which I don't want to add all manually. Is there a way to use the
>     default for these simple properties?

-- 
typed with Neo 2 -- an ergonomically optimized keyboard layout
for German, English, programming, and science

http://neo-layout.org/

Mime
View raw message