Groovy- map:每次需要新实例

时间:2018-09-01 14:07:19

标签: grails groovy hashmap

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

MyObject {
    def type
}


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

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

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

1 个答案:

答案 0 :(得分: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),但是我想如果我们知道您的用例,那么还有更好的解决方案。