не знаю, каков ваш вариант использования, но я думаю, у меня есть ответ на ваш вопрос:
def myMap = [
"key1" : new MyObject()
]
Просто сначала создайте новый объект, а затем сохраните этот объект на карте. Поэтому каждый раз, когда вы получаете к нему доступ, вы получаете один и тот же объект.
Чтобы создать описанное вами поведение, вам нужно добавить что-то динамическое на карту - закрытие!
def myMap = [
"key2" : {-> new MyObject()}
]
но теперь myMap.get("key2")
по-прежнему возвращает всегда то же самое - закрытие. Но если вы выполняете его, вызывая myMap.get("key2")()
(или короткий myMap.key2
), вы каждый раз получаете новый объект!
К сожалению, это близко, как вы получите. Я надеялся сделать трюк с ключом под названием getKey3
- я надеялся, что Groovy при обращении к key3
будет вызывать это «getter», но, похоже, это не так.
В Groovy есть и другие «хитрости», которые могут помочь вам в достижении вашей цели (например, MetaProgramming), но я думаю, что есть лучшее решение, если бы мы знали ваш вариант использования.