Groovy-map:每次都需要新实例

问题描述 投票:0回答:1

我的要求是每次访问MAP中的值时都会获得一个新实例。

MyObject {
    def type
}


def myMap = [
"key1" : new MyObject()
]

def obj1 =  myMap.get("key1")
def obj2 =  myMap.get("key1")

obj1和obj2可以是两个不同的实例吗?如果并行执行/访问它将如何表现?

grails groovy hashmap
1个回答
0
投票

不知道你的用例是什么,但我想我有你的问题的答案:

def myMap = [
  "key1" : new MyObject()
]

首先实例化一个新对象,然后将该对象存储在地图中。因此,每次访问它时,都会获得相同的对象。

要创建您描述的行为,您需要向地图添加动态内容 - 闭包!

def myMap = [
  "key2" : {-> new MyObject()}
]

但现在myMap.get("key2")仍然总是相同 - 一个闭包。但是如果你通过调用myMap.get("key2")()(或短myMap.key2)执行它,你每次都会得到一个不同的对象!

不幸的是,这是一个接近,因为你会得到。我希望用一个名为getKey3的键来做一个技巧 - 我希望Groovy在访问key3时会称之为“getter”,但事实并非如此。

Groovy中还有其他“技巧”可以帮助您实现目标(如MetaProgramming),但我想如果我们知道您的用例,还有更好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.